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

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

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

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

dstat也许值得一看,这是一个现代化的替代品。

如果你的内核有IO记账 ,那么你可以使用iotop来提供这样的信息。 另外,像collectd这样的监视工具可以logging和报告数据。

要找出造成高负荷的原因,你可以检查几件事情。

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