故障排查:CPU和CPU load问题排查
涉及到的命令:top、iotop、vmstat ....
CPU:

- us(user) 用户进程占用CPU时间比例
- sy(system) 系统占用CPU时间比例
- id(idel) CPU空闲时间比
- wa(iowait) IO等待时间比(IO等待高时,可能是磁盘性能有问题了)
- st(steal) steal time
vmstat

procs(processor)
r(Running or Runnable):就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
b(Blocked):处于不可中断睡眠状态的进程数。
memory
free:剩余的物理内存
buff:
cache:
swap
- si 从磁盘交换的内存大小
- so 交换到磁盘的内存大小
io
bi:从块设备接收的块(block/s)
bo:发送给块设备的块(block/s).如果这个值长期不为0,说明内存可能有问题,因为没有使用到缓存(当然,不排除直接I/O的情况,但是一般很少有直接I/O的)
system
- in 每秒的中断次数,包括时钟中断(各类型终中断次数统计:# watch -d cat /proc/interrupts)
- cs 每秒进程上下文切换次数(查看每个进程的上下文切换次数:# pidstat -w -t 1 )
关于# pidstat -w -t 1

cswch:自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
nvcswch:非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。
1.情况一:cpu load值高、cpu的wa值偏高,如图
观察机器中top数据,发现内存使用率正常,但wa值很高,%wa指CPU等待磁盘写入完成的时间,怀疑磁盘性能负载过高导致
wa(iowait):显示用于等待I/O操作占用 CPU 总时间的百分比。
排查分析:
1.通过iotop命令查看对磁盘有操作的进程,
#iotop -o -d 5 (# -o: 只显示实际执行I/O的进程或线程。-d:刷新间隔,如图

通过iotop过滤到占用磁盘ID非常高的线程ID(TID),其实这里已经可以看到进程信息了,再通过 PS命令过滤线程ID确认业务进程,kill 掉进程后CPU负载降下来了。
#ps -eLf |grep TID
#kill PID
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统