有时我的服务器会在“顶级”程序中显示较高的平均负载(例如,在 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 这样的监控工具可以记录和报告数据。