服务器 CPU 突然飙高?用 top 和 ps 三步揪出吃 CPU 的进程
服务器突然变慢,网页打开转圈,远程连接也一卡一卡,这时候最忌讳上来就重启,先花几分钟把真正吃掉处理器资源的进程找出来,问题往往就解决了一半,下面三步是我在线上排障时最常用的顺序,从整体到局部,越往后越精准。
第一步,先用 top 看整体负载和占用最高的进程
在终端里输入 top ,先看第一行的负载均值,它代表最近一段时间内等待使用处理器的任务数量,再看下面任务总数里正在运行和等待的任务有几个,如果等待的任务很多,说明处理器确实在排队,接着看占用率最高的那几行,重点看处理器占用率这一列,数值一直居高不下又没有下降趋势的进程最可疑,再看内存占用率这一列做对照,有些进程处理器占用不高但内存一直在涨,也可能是同一次故障的另一面,把可疑进程的进程号记下来,后面还要用它继续深挖,不要只看一眼就下结论,多刷新几次,确认占用是持续性的,而不是某个短暂任务刚好撞上。
第二步,再用 ps 按处理器占用排序,把全量进程排个队
top 适合看动态变化,ps 适合看一张全量快照,用 ps aux 加按处理器占用的排序参数,把所有进程按处理器占用从高到低排出来,第一行往往就是真凶,对照它的用户名、启动时间和完整启动命令,判断它是业务进程、定时任务,还是某个失控的后台脚本,如果启动时间正好和故障开始时间吻合,可疑程度就更高,再结合进程号查它的父进程,看看是谁把它拉起来的,是手动启动的调试进程,还是定时任务触发的批量处理,顺着这条链往上找,往往能找到故障的源头而不是只处理表面症状。
第三步,看进程详情,再决定是放行还是处置
定位到进程号之后,先看它打开了哪些文件和网络连接,再看它最近的系统调用和运行状态,判断它是在正常干活,还是卡在了某个循环或者等待外部接口返回,如果是业务高峰导致的正常繁忙,先考虑限流、扩容或者把非核心任务挪到低峰期再跑;如果是某个写错的循环或者重复触发的定时任务,先暂停触发源,再平稳结束失控进程,结束之后不要立刻离开,重新用 top 观察几分钟,确认处理器占用回落,负载均值回落,网页响应恢复正常,再把这次的进程号、启动时间、触发原因和处置动作记下来,下次再遇到类似飙高,就能直接对照处理,不用从头再查一遍。
- 点赞
- 收藏
- 关注作者
评论(0)