Closed heidsoft closed 5 years ago
在使用top命令检查系统负载的时候,可以看到Load averages字段,但是这个字段并不是表示CPU的繁忙程度,而是度量系统整体负载。
Load averages采样是从/proc/loadavg中获取的:
2.72 3.03 3.10 7/2241 16303
前3个字段表示1分钟,5分钟和15分钟内在运行队列(状态R)或者等待磁盘I/O(状态D)的任务数量的平均值。这个数值和uptime命令显示的平均负载是一样的。
第4个字段包含两个通过/分隔的数值,前一个数值是当前可运行的内核调度对象(进程,线程),后一个数值是当前存在系统中的内核可调度对象的数量。
第5个字段是系统最近创建的进程的PID。
如果你看到load average数值是20,则表明平均有20个进程在运行或等待状态。有可能系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,因为这两者没有直接关系。
如果你看到%wa数值很高泽表明一些进程在异常地使用磁盘,这导致系统非常缓慢。需要找出这个异常状态是D的进程(其进程发起磁盘io并等待磁盘IO返回所以进入D状态)。
亲,load怎么了?已经飙到了20+
load是如何计算的
load = run queue length (运行队列中的等待进程和正在执行的进程数)
参考资料:
Understanding Linux CPU Load - when should you be worried? 中文版
正确认识物理CPU、多核和逻辑CPU
查看逻辑CPU
逻辑CPU个数=物理CPU个数_cores个数_2(开启超程)
查看物理CPU、多核和逻辑CPU
cat /proc/cpuinfo
load到底多大比较合适?
逻辑CPU个数*0.7
Linux Scheduler
参考资料
Scheduling in Linux
Inside the Linux scheduler
Linux Scheduler算法演示
相关算法在线演示
进程状态
R running or runnable (on run queue)
D uninterruptible sleep (usually IO)
S interruptible sleep (waiting for an event to complete)
Z defunct/zombie, terminated but not reaped by its parent
T stopped, either by a job control signal or because it is being traced
参考资料:
Linux进程状态
Linux进程的三种状态
OS中定义的进程状态
参考资料
Operating system concepts
load实例
high load & cpu
high load low cpu (todo)
上下文切换频繁
常用命令
CPU负载