如果 CPU 使用率不高,如何判断哪些进程导致高负载?

Lor*_*ein 13 linux

有时我的服务器会在“顶级”程序中显示高平均负载(例如,4 核机器上的负载约为 10),但实际 CPU 使用率并不是特别高。

我认为问题在于有许多 I/O 密集型作业正在运行。如果顶部的“%CPU”值不是那么高,是否有任何简单的方法可以识别导致负载的这些作业?

3h4*_*h4x 9

要找出导致高负载的原因,您可以检查一些内容。

  • vmstat -w将向您展示 ovierwiem(进程、交换、mem、cpu、io、系统)
  • pmstat -P ALL 将为您提供每个 cpu 核心的统计信息(带有 %iowait)
  • iostat -x寻找高 %util 或长等待或大平均队列大小
    • 深入挖掘iotop
  • ps -ax寻找不可中断睡眠(通常是IO)的状态D,再运行一次检查是否仍处于D状态
    • 使用 strace 进行更深入的挖掘
    • 使用 lsof 和 netstat 检查这些进程的文件和连接
  • sar/sysstat - 使用该工具,您不仅可以探索“现在”统计数据,还可以检查昨天午夜发生了什么
    • sar -b- 总体IO活动
    • sar -d- 单独的块设备 io 活动


sle*_*ske 7

iostat可以报​​告这样的统计数据。通常包含在您的发行版中的 sysstat 包中。

dstat也可能值得一看,它是现代的替代品。