Ubuntu僵尸进程监控工具与用法
一 常用监控工具与快速用法
| 工具 | 作用与特点 | 快速用法示例 |
|---|---|---|
| ps | 列出进程,配合状态过滤精准定位僵尸 | `ps -eo pid,ppid,stat,cmd |
| top / htop | 实时查看进程状态;htop更直观、可高亮 | top(查看 STAT 列);htop(按 F3 搜索 zombie,或启用列显示) |
| pstree | 树状展示进程关系,便于追溯父进程 | `pstree -p |
| pidstat(sysstat) | 按进程统计,含状态变化,适合趋势观察 | pidstat -w 1(观察状态列是否出现 Z) |
| /proc 文件系统 | 直接读取内核进程状态,脚本化最灵活 | for p in /proc/[0-9]*; do grep -q 'State:.*zombie' $p/status && echo "PID: $(basename $p)"; done |
| Glances | 一体化监控,支持按状态筛选与 Web 远程 | glances(按 z 切换显示僵尸;glances -w 启动 Web,端口 61208) |
| systemd-cgtop | 按控制组统计资源,辅助定位异常服务 | systemd-cgtop |
| atop | 高级系统/进程监控,日志回看 | atop |
| 以上工具均可用于发现状态为 Z 或命令行中带有 |
二 一键排查命令
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/ {print}'ps -eo stat | awk '$1 ~ /Z/ {count++} END {print "Zombies:", count+0}'ps -o ppid= -p <ZOMBIE_PID>pstree -aps <ZOMBIE_PID>z=$(ps -eo stat | awk '$1 ~ /Z/ {c++} END {print c+0}'); [ "$z" -gt 0 ] && echo "Zombie count: $z" | mail -s "Zombie Alert" admin@example.com
以上命令覆盖了命令行、实时、树状与脚本化巡检的典型场景。三 处理思路与注意事项
ppid=$(ps -o ppid= -p <ZOMBIE_PID>)kill -TERM "$ppid" 或建议父进程处理子进程退出:kill -s SIGCHLD "$ppid"kill -KILL "$ppid"(可能导致业务中断,谨慎使用)四 自动化监控与告警方案
glances -w(默认端口 61208),在 Web 界面按 z 查看僵尸,结合外部监控系统对页面指标或日志进行阈值告警与巡检。sudo apt install sysstatpidstat -w 1(关注状态列与任务变化),配合日志/告警平台做长期趋势与异常检测。