温馨提示×

如何统计debian僵尸进程

小樊
34
2026-09-17 03:30:34
栏目: 智能运维

在 Debian(以及其他 Linux 发行版)中,僵尸进程(Zombie Process) 是指已经结束执行,但其父进程尚未调用 wait() 回收其退出状态的进程。它们不会占用 CPU 或内存,但会占用进程表项。

下面是统计和查看 Debian 僵尸进程的常用方法。


一、快速统计僵尸进程数量

方法 1:使用 ps

ps aux | awk '$8 ~ /Z/ {print}'

或只统计数量:

ps aux | awk '$8 ~ /Z/ {z++} END {print z+0}'

方法 2:使用 top

在终端运行:

top

然后看右上角:

Tasks: 210 total,   1 running, 208 sleeping,   0 stopped,   1 zombie

其中 zombie 就是僵尸进程数量。


二、使用 /proc 直接统计(推荐脚本用)

count=0
for pid in /proc/[0-9]*; do
    stat=$(awk '{print $3}' $pid/stat 2>/dev/null)
    if [ "$stat" = "Z" ]; then
        count=$((count+1))
    fi
done
echo "Zombie processes: $count"

三、查看僵尸进程的详细信息

ps -eo pid,ppid,stat,comm | awk '$3=="Z"'

输出示例:

 1234  1000 Z   java
  • PID:僵尸进程 ID
  • PPID:父进程 ID(关键)
  • STAT=Z:僵尸状态

四、如何处理僵尸进程

⚠️ 不能直接 kill 僵尸进程

正确方式:

  1. 杀掉或重启父进程
kill -9 PPID

systemctl restart 父进程服务
  1. 如果父进程是 init(PID 1)
    • 可能是系统 bug
    • 需重启系统或服务

五、常见原因

  • 父进程未正确处理 SIGCHLD
  • 多线程程序中 wait() 使用不当
  • Java / Python / C 程序异常退出

六、监控建议(生产环境)

  • zabbix / prometheus 监控 zombie 数
  • 定时脚本报警:
if [ $(ps aux | awk '$8 ~ /Z/' | wc -l) -gt 10 ]; then
    echo "Too many zombies!" | mail admin@x.com
fi

如果你愿意,可以贴出 ps -eftop 的输出,我可以帮你分析是哪个程序在产生僵尸进程

0