如何使用Shell解决问题进程?

来源:中国IT实验室 作者:中国IT实验室
  

最近公司服务器不太稳定,总是在凌晨某个时段突发高负载情况,因为客观环境比较复杂,所以很难猜测出到底是哪个进程出现了问题,加之故障发生时,通常我在睡觉,无形中增加了解决问题的难度,于是我便写了一个Shell来替我搞定这个问题。

实际上解决问题的思路非常简单:通过CRON每分钟运行一个Shell,查询系统负载,一旦发现异常,就通过「ps」命令保存进程快照,也可以进一步保存负载,内存等相关的数据,但通常没有必要,因为通过「sar」命令很容易拿到。相关Shell代码如下:

#/bin/bash

LOAD=$(awk '{print $1}' /proc/loadavg)

CPUNUM=$(grep processor /proc/cpuinfo | wc -l)

if [ $(echo "$LOAD > $CPUNUM" | bc) = 1 ]; then

RESULT=$(ps -eo pcpu,pmem,user,args | awk '$1 > 0' | sort -nr)

if [ -n "$RESULT" ]; then

echo "$RESULT" > /var/log/snapshot.$(date +"%Y%m%d%H%M")

fi

fi

实际使用时需要注意的地方:首先,要避免日志文件塞满硬盘;其次,因为是通过CRON来执行的,所以可能会漏判,如果强调准确性请自行改写为守护进程方式。

这个Shell实在是太简单了,简单到我本不想专门写一篇文章,不过它却非常实用,帮我解决了大问题,所以还是记录下来,希望它也能助大家一臂之力。


时间:2013-03-03 17:38 来源:中国IT实验室 作者:中国IT实验室 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量