Linux 进程排查三板斧:ps、top 与 kill

举报
yd_221252513 发表于 2026/11/07 11:51:17 2026/11/07
【摘要】 CPU 飙高、服务假死、进程杀不掉?ps 与 top 定位嫌疑进程,kill 信号选对才有效,三招串起一次完整的进程排障,附僵尸进程的收尾姿势。

从一次 CPU 飙到 98% 说起

告警群里说服务器 CPU 飙到 98%,登录上去第一件事不是慌着重启,而是搞清楚“是谁在吃、吃了什么、能不能杀”。进程排查三板斧——ps、top、kill——就是回答这三个问题的标准动作。

第一板斧:ps 找嫌疑人

ps aux 列出全量进程快照,配合排序快速锁定:ps aux --sort=-%cpu | head -10 看吃 CPU 最狠的前十名;ps aux --sort=-%mem 找内存大户。锁定目标后记下 PID 和启动命令,ps -ef | grep 进程名 还能看清它的父进程是谁——很多“杀不死”的进程,其实是被某个守护进程不停拉起来的,杀子进程前得先管住父进程。

第二板斧:top 看现场

ps 是快照,top 是直播。输入 top 后按大写 P 按 CPU 排序、M 按内存排序,Shift+H 还能切换到线程视图——多线程程序飙高时,线程视图才能锁定具体是哪个线程在捣乱。顶部 load average 三个数字是过去 1、5、15 分钟的平均负载,拿它和 CPU 核数比一下:负载长期高于核数,才说明真的过载。

第三板斧:kill 选对信号再动手

kill 不是“杀”,是“发信号”。kill 15(SIGTERM)是礼貌地请进程收拾好现场再退出,绝大多数情况用默认的就够;进程赖着不走再上 kill 9(SIGKILL)强制击毙——但它不给进程任何善后机会,数据库这类有状态服务慎用。杀完记得确认:ps -p PID 还在不在;若进程是被 systemd 管理的,用 systemctl restart 走正规流程更稳。

僵尸进程的收尾

如果 ps 里看到状态是 Z 的僵尸进程,kill 9 对它无效——僵尸已经死了,只是退出状态没人收。正确姿势是找到它的父进程:僵尸的父进程结束或重启后,僵尸会被 init 收养并清理。

小结

ps 快照找嫌疑人、top 直播看现场、kill 选信号再动手——三板斧的顺序别乱:先观察再动手,先 TERM 后 KILL,杀完必确认。把这套动作练成肌肉记忆,半夜 CPU 告警就没那么可怕。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。