怎样从系统监控中发现centos僵尸进程
导读:从系统监控中发现 CentOS 僵尸进程 一、快速识别要点 僵尸进程在进程状态中显示为Z(或命令行中带有defunct标记),它不再占用 CPU/内存,但会占用进程号与进程表项。在监控中,优先关注状态列与命令行是否出现上述特征。 二、命...
从系统监控中发现 CentOS 僵尸进程
一、快速识别要点
- 僵尸进程在进程状态中显示为Z(或命令行中带有defunct标记),它不再占用 CPU/内存,但会占用进程号与进程表项。在监控中,优先关注状态列与命令行是否出现上述特征。
二、命令行即时排查
- 使用 ps 精准筛选状态为 Z 的进程,并显示父进程便于溯源:
- ps -A -o stat,ppid,pid,cmd | awk ‘$1 ~ /^[Zz]/ { print} ’
- 用 top 查看整体负载与僵尸数量:
- top/htop 中观察进程列表的STAT列,状态为Z的即为僵尸;top 头部会显示zombie计数。
- 借助 /proc 文件系统核对单个进程状态:
- cat /proc//status | grep State;若包含Z,即为僵尸。
- 以进程树视角定位父子关系与源头:
- pstree -p | grep -E ‘Z|\[zombie\]’;或 pstree -aps < 父PID> 查看可疑父进程的子进程情况。
三、持续监控与告警
- 轻量循环脚本定期巡检并输出时间戳,便于接入日志或告警系统:
- #!/usr/bin/env bash while true; do ts=$(date ‘+%F %T’) z=$(ps -A -o stat,ppid,pid,cmd | awk ‘$1 ~ /^[Zz]/ { print $0} ’) if [[ -n “$z” ]]; then echo “[$ts] Zombie(s) found:”; echo “$z” fi sleep 10 done
- 使用系统监控平台设置阈值告警(示例思路):
- Monit:配置进程监控并在检测到异常状态时触发告警(需结合自定义脚本或外部检查)。
- Nagios:使用 check_procs 插件对状态为 Z 的进程设置阈值告警,例如:
- command_line /usr/lib64/nagios/plugins/check_procs -Z -c 0
- 含义:当Z 状态进程数 > 0时触发告警。
四、排查与处置要点
- 处置原则:僵尸进程不能被 kill -9 直接清除,应定位并终止其父进程(使僵尸被 init/systemd 收养并回收),或修复父进程未调用 wait/waitpid 回收子进程的逻辑缺陷。
- 操作建议:
- 先通过 pstree/ps 找到僵尸的PPID,确认父进程是否为关键服务;必要时先尝试**kill -HUP 促其回收,失败再评估kill -9 **的影响范围并择机重启父进程。
- 若父进程异常或无回收逻辑,需从应用侧修复(正确处理 SIGCHLD、回收子进程),并滚动重启相关服务以彻底清除积累僵尸。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样从系统监控中发现centos僵尸进程
本文地址: https://pptw.com/jishu/747790.html
