如何使用Shell缉拿问题进程
浏览:3755次 出处信息
最近公司服务器不太稳定,总是在凌晨某个时段突发高负载情况,因为客观环境比较复杂,所以很难猜测出到底是哪个进程出现了问题,加之故障发生时,通常我在睡觉,等我被报警短信吵醒,通过公司VPN登上服务器的时候,故障多半已经消失了!不过这个问题难不倒一个合格的DevOps,让我写个Shell搞定它。
实际上解决问题的思路非常简单:通过CRON每分钟运行一个Shell,查询系统负载,一旦发现异常,就通过「ps」命令保存进程快照,也可以进一步保存负载,内存等相关的数据,但通常没有必要,因为通过「sar」命令很容易拿到。相关Shell代码如下:
#/bin/bash
LOAD=$(awk '{print $1}' /proc/loadavg)
CPUNUM=$(grep -c processor /proc/cpuinfo)
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/ps.$(date +"%Y%m%d%H%M")
fi
fi实际使用时需要注意的地方:首先,要避免日志文件塞满硬盘;其次,因为是通过CRON来执行的,所以可能会漏判,如果强调准确性请自行改写为守护进程方式。
…
这个Shell实在是太简单了,以至于我本不想专门写一篇文章,不过它却非常实用,帮我解决了大问题,所以还是记录下来,希望它也能助大家一臂之力。
建议继续学习:
- Linux服务器性能评估 (阅读:9839)
- 你可能不知道的Shell (阅读:8111)
- 在 shell 脚本里打日志 (阅读:5996)
- 面向对象的Shell脚本 (阅读:5953)
- Bash如何取得当前正在执行的脚本的绝对路径? (阅读:5811)
- 使用Shell快捷键助你一臂之力 (阅读:5333)
- Bash Shell 快捷键 (阅读:4850)
- 加密你的shell (阅读:4793)
- shell文件存在相关判断参数 (阅读:4651)
- Unix考古记:一个“遗失”的shell (阅读:4412)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:Sentry: 错误日志集中管理 >>
文章信息
- 作者:老王 来源: 火丁笔记
- 标签: sar Shell
- 发布时间:2013-03-03 22:57:03
建议继续学习
近3天十大热文
-
[592] WordPress插件开发 -- 在插件使用 -
[54] 到底什么是MVC? -
[51] 程序员技术练级攻略 -
[50] AWS云平台系列介绍(一):AWS平台与EC -
[50] cookie窃取和session劫持 -
[47] 红黑树并没有我们想象的那么难(上) -
[46] 关于IO的同步,异步,阻塞,非阻塞 -
[46] 页面停留时间和网站停留时间详解 -
[45] 你应该知道的16个Linux服务器监控命令 -
[45] YSLOW法则中,为什么yahoo推荐用GE
