温馨提示×

ubuntu僵尸进程监控工具

小樊
35
2025-11-18 18:46:12
栏目: 智能运维

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 或命令行中带有 的僵尸进程;在 htop 与 Glances 中通常会有高亮或专门标记。

二 一键排查命令

  • 列出所有僵尸进程(含 PID/PPID/STAT/CMD
    • ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/ {print}'
  • 统计当前僵尸数量
    • ps -eo stat | awk '$1 ~ /Z/ {count++} END {print "Zombies:", count+0}'
  • 追溯父进程(拿到僵尸的 PPID 后再分析)
    • 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 以上命令覆盖了命令行、实时、树状与脚本化巡检的典型场景。

三 处理思路与注意事项

  • 不能直接“杀死”僵尸进程,必须让其父进程调用 wait/waitpid 回收;若父进程异常或无回收逻辑,可终止父进程,使僵尸被 PID 1(如 systemd)收养并清理。
  • 安全操作顺序
    • 先定位父进程:ppid=$(ps -o ppid= -p <ZOMBIE_PID>)
    • 尝试温和回收:kill -TERM "$ppid" 或建议父进程处理子进程退出:kill -s SIGCHLD "$ppid"
    • 无响应再强制:kill -KILL "$ppid"(可能导致业务中断,谨慎使用)
  • 预防建议
    • 修复应用对 SIGCHLD 的处理,确保回收子进程
    • 为关键服务配置 Restart=always(systemd),父进程异常退出后自动重启,减少僵尸堆积
    • 结合监控阈值与告警,持续观察 Z 状态数量变化 终止父进程或发送信号前,请确认对业务连续性的影响并做好回滚预案。

四 自动化监控与告警方案

  • Glances + Web + 告警
    • 启动:glances -w(默认端口 61208),在 Web 界面按 z 查看僵尸,结合外部监控系统对页面指标或日志进行阈值告警与巡检。
  • sysstat/pidstat 趋势监控
    • 安装:sudo apt install sysstat
    • 观察:pidstat -w 1(关注状态列与任务变化),配合日志/告警平台做长期趋势与异常检测。
  • 轻量脚本 + 定时任务
    • 示例见“一键排查命令”中的计数与邮件告警;使用 cron 定时执行,超过阈值即通知 admin@example.com

0