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

运维 系统运维
如何使用Shell解决问题进程?实际上解决问题的思路非常简单:通过CRON每分钟运行一个Shell,查询系统负载,一旦发现异常,就通过「ps」命令保存进程快照,也可以进一步保存负载,内存等相关的数据。

  最近公司服务器不太稳定,总是在凌晨某个时段突发高负载情况,因为客观环境比较复杂,所以很难猜测出到底是哪个进程出现了问题,加之故障发生时,通常我在睡觉,无形中增加了解决问题的难度,于是我便写了一个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实在是太简单了,简单到我本不想专门写一篇文章,不过它却非常实用,帮我解决了大问题,所以还是记录下来,希望它也能助大家一臂之力。

责任编辑:黄丹 来源: udpwork.com
相关推荐

2014-12-26 10:23:21

谷歌

2013-03-20 09:54:07

2010-05-06 17:07:34

Unix命令

2011-06-29 18:02:58

Qt 中文 翻译

2022-09-02 16:07:02

团队问题

2020-07-03 14:44:44

2009-08-13 17:25:18

C# Convert类

2009-07-28 12:35:37

querystring

2021-10-27 10:53:38

智慧城市智能移动技术智能

2013-09-25 10:18:26

Java启发式搜索

2010-05-06 17:13:18

Unix命令

2011-06-30 14:16:25

QT 中文 乱码

2012-10-31 10:47:05

VMware

2009-12-28 14:15:06

ADO连接

2023-11-03 13:38:49

代码架构

2016-06-15 10:08:29

云计算

2020-12-14 06:57:37

shell

2015-10-27 15:58:20

PHP程序员问题能力

2020-12-07 09:07:41

程序员技能开发者

2010-01-06 10:08:57

点赞
收藏

51CTO技术栈公众号