1. Linux系统CPU占用100%排查概述
遇到服务器CPU占用飙升至100%的情况,对任何运维工程师或开发者来说都是一场噩梦。这种紧急状况下,我们需要一套系统化的排查方法,快速定位问题根源。本文将分享我在生产环境中总结出的高效排查流程,从全局到局部层层深入,最终精确锁定问题代码。
CPU满载问题通常表现为系统响应缓慢、服务超时甚至完全无响应。根据多年经验,这类问题主要源于以下几种情况:
- 代码逻辑缺陷导致的死循环
- 不合理的线程同步引发的锁竞争
- 频繁的系统调用造成的内核态CPU消耗
- 内存管理不当引发的频繁GC或malloc/free
重要提示:排查过程中应尽量避免直接kill关键进程,特别是在生产环境。正确的做法是先降低进程优先级,获取足够诊断信息后再决定处理方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 全局定位高CPU进程
2.1 使用top命令进行初步诊断
top命令是Linux系统监控的瑞士军刀,它能实时显示系统中各个进程的资源占用情况。当CPU满载时,我通常这样使用:
bash复制top -c
关键操作要点:
- 观察%Cpu(s)行:us表示用户态CPU,sy表示内核态CPU。如果us接近100%,通常是应用代码问题;sy高则可能是系统调用过多
- 按下Shift+P:按CPU使用率排序,快速定位问题进程
- 注意NI(优先级)和PR(进程优先级)列:数值越大优先级越低
- -c参数显示完整命令:方便识别具体是哪个应用实例
2.2 使用pidstat获取更精确数据
当系统负载极高时,top本身的资源消耗可能会影响诊断。这时pidstat是更好的选择:
bash复制pidstat -u -p ALL 1 5
这个命令每1秒采样一次,共采样5次,输出所有进程的CPU使用情况。其中:
- %usr列显示用户态CPU占比
- %system列显示内核态CPU占比
- %guest列显示运行虚拟机CPU占比
- %wait列显示进程等待CPU的时间占比
经验分享:当%wait列数值较高时,通常说明系统存在CPU资源竞争,可能是进程/线程数过多导致的调度开销。
3. 深入分析问题进程
3.1 定位进程内的异常线程
找到高CPU进程后,需要进一步分析其线程情况。我常用的方
