我是一名 Linux 菜鸟,所以我试图找出一个差异。问题是与“ps aux”命令的输出相比,/proc/loadavg 中可用的 1 分钟平均负载没有意义。例如,有时 1 分钟平均负载达到 15+。鉴于我的 VPS 有 6 个内核,这是一个巨大的负载。然而,“ps aux”几乎没有显示任何负载——所有进程的 %CPU 加起来只有几个百分点。
我究竟做错了什么?这种差异是否是由于“ps”显示当前正在运行的进程,而高 1 分钟平均值可能是由不再运行的进程引起的?如果是这种情况,我如何查看过去一分钟内运行的所有进程的列表?
要理解的关键点是 CPU 使用率和平均负载测量两个不同的东西。
CPU 使用情况更容易掌握,因为它是 CPU不空闲的时间,其中“空闲”表示内核空闲循环(执行 HALT 指令或类似指令)。
加载平均度量,如手册页中所述,
有时,高 CPU 利用率可能与高负载平均相关(反之亦然);其他时候这两个值完全不相关:例如,许多等待网络 I/O 的进程会增加您的平均负载,而基本上不使用 CPU 时间。
linux中的load值并不是直接对应cpu使用率的值。cpu 使用率是根据 cpu 在给定时间段内空闲的时间来计算的。负载是关于等待处理 IO 的进程的指示,例如磁盘读取、网络活动。(我不确定天气是进程的数量、响应 io 请求的时间还是只是计算的比较数字)
因此,高负载、低 cpu 使用率通常意味着某些进程正在运行,它不需要太多处理能力,但严重依赖于一些 IO 繁重的任务