IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何使用Shell缉拿问题进程

火丁笔记 2013-03-03 22:57:03 累计浏览 3,904 次
本机暂存

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

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,409)
  2. 28个Unix/Linux的命令行神器 (累计阅读 16,791)
  3. 我常用的主机监控shell脚本 (累计阅读 13,429)
  4. ps - 按进程消耗内存多少排序 (累计阅读 12,687)
  5. 100个常用的linux命令 (累计阅读 11,607)
  6. Linux命令行里的“瑞士军刀” (累计阅读 11,584)
  7. 每个程序员都应该知道的8个Linux命令 (累计阅读 10,745)
  8. 最受欢迎的10个 Linux 单行命令 (累计阅读 10,131)
  9. linux下搜索find命令详解 (累计阅读 9,459)
  10. tomcat catalina.out日志切割每天生成一个文件 (累计阅读 9,243)