故障排查: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

 

posted @   浮~生  阅读(594)  评论(0编辑  收藏  举报
编辑推荐:
· .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 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示