巡检进程应使用 ps -eo user,stat,comm 精简输出,聚焦用户、状态、可执行名;user 定位归属,stat 判断异常(如 z 僵死),comm 截断需注意,长名可用 args 但慎防敏感信息。

在生产环境中,巡检进程需简洁、关键、可读性强,避免冗余信息。使用 ps 的自定义输出(-eo)配合 User、Stat、Comm 字段,能快速聚焦用户身份、进程状态和可执行名,符合运维规范中“谁在跑什么、状态是否异常”的核心要求。
明确字段含义与巡检意义
User:启动进程的用户名(非 UID),便于快速定位归属团队或服务账户;
Stat:进程当前状态码(如 R运行、S休眠、Z僵死、高优先级、<code>N低优先级),是判断异常(如大量 Z 或长时间 R)的关键依据;
Comm:命令名(不含路径和参数),干净利落,适合比对标准服务名(如 nginx、java、mysqld),规避参数干扰。
构造标准巡检命令
推荐基础命令(按 CPU 使用率倒序,只显示前 20 条):
ps -eo user,stat,comm --sort=-%cpu | head -n 21
说明:
• -eo 启用自定义输出格式;
• 字段顺序即列顺序,建议按 user→stat→comm 排列,符合“责任人→状态→服务”逻辑;
• --sort=-%cpu 按 CPU 占用降序,便于发现资源热点;
• head -n 21 包含表头共 21 行(表头 1 行 + 数据 20 行),适配终端宽度与巡检效率。
增强可读性与生产适配
- 添加 PID 和 CPU/内存占用(更完整):
ps -eo pid,user,%cpu,%mem,stat,comm --sort=-%cpu | head -n 21 - 过滤掉内核线程(避免干扰):
ps -eo user,stat,comm --sort=-%cpu | grep -v '^\[.*\]$' | head -n 21 - 按用户分组统计数量(辅助容量评估):
ps -eo user= | sort | uniq -c | sort -nr | head -10 - 导出为制表符分隔文件供后续分析:
ps -eo user,stat,comm --sort=-%cpu > /tmp/process_audit_$(date +%Y%m%d).tsv
常见问题与注意事项
• Comm 长度默认截断为 15 字符,若服务名过长(如带版本号的 jar 名),可用 args 替代,但需注意参数可能含敏感信息,生产慎用;
• Stat 中的 、<code>N、+ 等修饰符需结合理解——例如 <r> 表示高优先级运行中,<code>S+ 表示休眠且在前台进程组;
• 定期巡检建议封装为脚本并加入简单校验(如检查是否存在 Z 状态进程超过 3 个则告警);
• 避免在高负载机器上频繁执行 ps -eo 全量扫描,可加 -U 限定用户或 -C 指定命令进一步缩小范围。











