我是 Linux 新手,所以我想找出一个差异。问题是,与“ps aux”命令的输出相比,/proc/loadavg 中提供的 1 分钟平均负载没有意义。例如,有时 1 分钟平均负载达到 15+。考虑到我的 VPS 有 6 个核心,这是一个巨大的负载。然而,“ps aux”几乎没有显示任何负载 - 所有进程的 %CPU 加起来只有百分之几。
我做错了什么?这种差异是否是因为“ps”显示的是当前正在运行的进程,而较高的 1 分钟平均值可能是由不再运行的进程引起的?如果是这种情况,我如何才能看到过去一分钟内运行的所有进程的列表?
答案1
Linux 中的负载值不是直接与 CPU 使用率相对应的值。CPU 使用率是通过给定时间段内 CPU 处于空闲状态的时间来计算的。负载指示等待 IO 处理的进程,例如磁盘读取、网络活动。(我不确定它是进程数量、响应 IO 请求的时间还是仅用于比较的计算数字)
因此,高负载、低 CPU 使用率通常意味着正在运行的某个进程不需要太多处理能力,但严重依赖于某些 IO 密集型任务
答案2
要理解的关键点是 CPU 使用率和平均负载测量两件不同的事情。
CPU 使用率更容易理解,因为它是 CPU并不闲着其中“idle”标识内核空闲循环(执行 HALT 指令或类似指令)。
平均负载测量,如手册页所述,
运行队列 (状态 R) 中的作业数或等待磁盘 I/O (状态 D) 的作业数,在 1、5 和 15 分钟内平均换句话说,平均负载就是运行队列中等待执行 (R) 或等待 I/O 完成 (D) 的进程数的平均值。
有时,高 CPU 利用率可能与高平均负载相关(反之亦然);其他时候这两个值完全不相关:例如,许多等待网络 I/O 的进程会增加平均负载,而基本上不占用 CPU 时间。