如果某个进程的 CPU 使用率不高,我怎样才能知道哪些进程导致了高负载?

如果某个进程的 CPU 使用率不高,我怎样才能知道哪些进程导致了高负载?

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

我猜想问题在于有许多 I/O 密集型作业正在运行。如果 top 中的“%CPU”值不是很高,是否有简单的方法可以识别导致负载的这些作业?

答案1

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

统计信息也许也值得一看,它是一个现代的替代品。

答案2

要找出导致高负载的原因,您可以检查几件事。

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

答案3

如果你有投入产出会计在您的内核中,您可以使用iotop它来提供类似的信息。此外,像 collectd 这样的监控工具可以记录和报告数据。

相关内容