Linux CPU 高占用、系统负载高完整排查流程

发布时间:2026/7/9 11:25:27
Linux CPU 高占用、系统负载高完整排查流程 一、先分清两个核心指标CPU 使用率 vs 系统负载CPU 使用率% Cpu单颗 CPU 满载 100%多核则总上限 CPU 核数 ×100%用户 us业务进程计算消耗系统 sy内核、磁盘 IO、中断、锁消耗iowait wa等待磁盘 IO负载高但 CPU 使用率低多半是 IO 瓶颈系统负载 load average1/5/15 分钟代表等待运行的任务队列长度包含正在运行 CPU 进程 等待 CPU 进程 不可中断睡眠 D 进程IO 阻塞4 核 CPUload4 代表 CPU 排队拥堵load 远大于核数说明严重瓶颈top、htop、mpstat、%Cpu(s) 里的 100% 基准 逻辑 CPU 核超线程算独立逻辑核怎么理解单颗 100%1 个逻辑 CPU跑满就是 100%4 物理核、无超线程 → 4 逻辑核整机 CPU 上限 400%4 物理核、开启超线程8 逻辑核→ 整机上限 800%举例plaintextlscpuCPU(s): 8 # 逻辑总核数Thread(s) per core: 2 # 每个物理核2个超线程Core(s) per socket: 4Socket(s): 1top 按 1 展开能看到 8 个独立 CPU 列每列满负载都是 100%整机满负载合计 800%。load average 对比参考配套理解负载均衡判断标准同样看逻辑核数逻辑核 8则 load 持续8 代表 CPU 队列拥堵、处理不过来。区分物理核 / 逻辑核命令bash运行# 逻辑核总数top使用的基数nproclscpu|grep^CPU(s)# 物理核心数lscpu|grepCore(s) per socket# CPU插槽数lscpu|grepSocket(s)# 超线程开关每个物理核线程数lscpu|grepThread(s) per core补充容易混淆的点进程绑核 taskset、容器 CPU 限制 --cpus 配额单位也是逻辑核云服务器配置标注的 4 核 8 线程性能上限按 800% 算不是 400%只看物理核会低估整机 CPU 承载上限排查高负载必须以逻辑核为准。Linux CPU 高占用、系统负载高完整排查流程一、先分清两个核心指标CPU 使用率 vs 系统负载CPU 使用率% Cpu单颗 CPU 满载 100%多核则总上限 CPU 核数 ×100%用户 us业务进程计算消耗系统 sy内核、磁盘 IO、中断、锁消耗iowait wa等待磁盘 IO负载高但 CPU 使用率低多半是 IO 瓶颈系统负载 load average1/5/15 分钟代表等待运行的任务队列长度包含正在运行 CPU 进程 等待 CPU 进程 不可中断睡眠 D 进程IO 阻塞4 核 CPUload4 代表 CPU 排队拥堵load 远大于核数说明严重瓶颈二、第一步全局快速定位一键看整体top最常用实时bash运行top常用快捷键1# 展开所有CPU核心看单颗是否打满P# 按CPU占用排序M# 按内存排序z# 彩色显示k# 输入PID杀进程ShiftW# 保存top配置重点看% Cpu (s) us/sy/wa 区分是计算密集还是 IO 阻塞Load average占用 CPU 最高的 PID、COMMANDhtop可视化推荐安装bash运行yuminstallhtop-y# CentOS/RHELaptinstallhtop-y# Ubuntu/Debianhtop直观展示每核 CPU、线程、内存支持鼠标操作。3. 快速看负载与 CPU 核数bash运行uptime# 只看负载nproc# 查看CPU总核数lscpu# 完整CPU信息核数、超线程三、场景 1CPU 使用率高us 高计算密集型定位占用 CPU 最高进程bash运行# 一次性输出不用进交互界面top-b-n1|head-30# 只展示CPU前10进程ps-aux--sort-pcpu|head-10# 按线程维度看Java/多进程服务必看ps-T-pPID-opid,tid,pcpu,cmd2. 查看进程内部线程消耗Java、Nginx、数据库bash运行# 1. 找到高CPU进程PIDpidstat-u1# 每秒输出进程CPU统计# 2. 打印进程所有线程CPU占用top-H-pPID# 3. 线程TID转16进制Java栈定位专用printf%x\n线程TID# 导出java栈日志匹配16进制线程号jstackPIDjstack.log分析进程行为Java 服务死循环、FullGC、正则卡死、大量循环计算Python/PHP死循环、大量循环运算、未释放循环资源编译 / 压缩任务tar、gzip、gcc、ffmpeg 占满 CPU恶意程序挖矿程序kdevtmpfsi、xmrig4. 临时处理bash运行# 降低进程优先级renice10-pPID# 杀死异常进程kill-9PID四、场景 2sy 系统 CPU 高内核占用高常见原因大量频繁创建销毁进程、线程磁盘频繁读写、大量 pagecache 刷新软中断 / 硬中断飙升网络流量暴打大量文件句柄、频繁文件操作内核锁竞争、内存 swap 频繁排查命令bash运行# 查看中断消耗mpstat-PALL1# 软中断统计si高网络瓶颈cat/proc/softirqs# 内核调用栈追踪看系统CPU消耗来源perftop# 查看每秒系统调用次数strace-pPID-c五、场景 3wa iowait 高负载高但 CPU 使用率低IO 瓶颈特征load 很高但 us/sy 很低wa 数值几十上百排查步骤全局磁盘 IO 负载bash运行iostat-x1重点指标%util接近100% 磁盘打满await/r_await/w_await读写延迟定位哪个进程疯狂读写磁盘bash运行iotop-oP# 只展示有IO操作的进程pidstat-d1查看读写文件bash运行# 追踪进程读写文件strace-pPID-eread,write# 查看进程打开文件lsof-pPIDIO 高常见诱因MySQL 大量慢查询、全表扫描、无索引写入日志疯狂打盘、日志未分割磁盘坏道、机械硬盘转速慢大量小文件读写、频繁 rm/tar 压缩swap 频繁使用内存不足磁盘虚拟内存bash运行# 查看swap使用free-hvmstat1# si/so不为0代表swap交换频繁六、场景 4负载很高但 CPU/IO 都不高D 不可中断进程进程处于 D 状态不可中断睡眠等待硬件资源会拉高 load 但不占用 CPUbash运行# 查找D状态进程ps-ef|awk$8 ~ /D/# 详细展示进程状态psauxH|awk$8 ~ /D/成因磁盘卡死、NFS 挂载断连、内核 BUG、硬件故障kill 无法杀死 D 进程只能重启服务器七、高级性能追踪perf内核级分析实时查看 CPU 热点函数bash运行perftop采集 CPU 调用栈生成报告bash运行perf record-g-pPIDsleep30perf report统计 CPU 上下文切换cs 数值暴涨代表线程频繁切换bash运行vmstat1八、数据库专项高 CPUMySQL 为例查看慢 SQL 占用 CPUsqlshow processlist;开启慢查询日志定位全表扫描、无索引SQL查看 CPU 与 IObash运行pidstat-u-d1-p$(pidof mysqld)优化加索引、分库分表、减少大事务、限制并发连接九、挖矿病毒排查服务器莫名 CPU100%挖矿程序特征陌生 PID 持续占满 CPU进程名随机、隐藏bash运行# 查看异常高CPU无名进程ps-aux--sort-pcpu# 查看定时任务病毒自启动crontab-lls/etc/cron.*# 查看可疑启动项systemctl list-unit-files# 检查/tmp /var/tmp隐藏程序ls-la/tmp十、优化通用方案CPU 计算密集优化代码去除死循环、缓存重复计算、异步任务扩容 CPU 核心、负载均衡分流请求限制进程 CPU 核数tasksetbash运行# 绑定进程到指定CPU核心taskset-c0-3 ./appIO 瓶颈优化数据库加索引、分批次写入、减少大事务日志切割、异步落盘、更换 SSD 高速磁盘增加内存减少 swap 使用调整磁盘调度算法、挂载更高 IO 存储内核调优临时生效bash运行# 减少swap使用倾向sysctlvm.swappiness10# 调整脏页刷新频率降低IO抖动sysctlvm.dirty_ratio10十一、排查完整顺序总结标准流程uptime /lscpu → 确认负载、CPU 核数判断是否过载top/htop → 区分 us 高 (计算) /sy 高 (内核) /wa 高 (IO)us 高ps/pidstat/top -H 定位进程 线程Java 用 jstack 定位代码wa 高iostat iotop 定位磁盘 IO 进程检查 swap、数据库日志sy 高mpstat、perf、软中断查看网络 / 内核开销load 高但 CPU 低查找 D 状态阻塞进程perf 内核采样定位底层热点检查定时任务、挖矿病毒、数据库慢查询临时限流 / 降优先级 / 杀异常进程长期优化业务代码 / 硬件需要我给你一套可直接复制的一键排查脚本执行后自动输出负载、CPU、IO、高占用进程汇总吗