top 中的平均负载和 vmstat 中的 procs

top 中的平均负载和 vmstat 中的 procs

据我所知,top 中的平均负载是处于运行或不间断睡眠状态的进程(线程)数,因此它应该等于 vmstat 中的 (procs-r +1 )+ procs-b,但实际上,这两个数字总是有很大差距。我的理解有任何错误,如果有朋友能指点我,我将不胜感激。

top - 05:34:50 up 1 day, 20:56,  5 users,  load average: 2.83, 2.67, 1.62
Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.8%us,  1.8%sy,  0.0%ni, 91.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.4%st
Mem:   1758000k total,   582636k used,  1175364k free,   103932k buffers
Swap:   917500k total,        0k used,   917500k free,   180868k cached

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1182524 103784 180860    0    0     1     9    6   53  7  2 91  0  0
 0  0      0 1182524 103784 180860    0    0     0    36   70  117  0  0 100  0  0
 0  0      0 1182516 103784 180860    0    0     0     0   73  132  0  1 100  0  0
 0  0      0 1182516 103784 180860    0    0     0     0   60  127  0  0 100  0  0
 1  0      0 1182516 103784 180860    0    0     0     0   62  102  0  0 100  0  0
 0  0      0 1182628 103784 180860    0    0     0     0  289  238  1  2 97  0  0
 2  0      0 1152160 103784 180892    0    0     0     8 1481 2371 54 12 34  0  0
 1  0      0 1182192 103784 180860    0    0     0     0  681  834 19  4 78  0  0
 0  0      0 1182200 103784 180860    0    0     0     0   80  147  0  1 100  0  0
 0  0      0 1182200 103784 180860    0    0     0     0   53  107  0  0 100  0  0
 0  0      0 1182208 103788 180856    0    0     0    72   64  123  0  0 100  1  0

答案1

它基于处于可运行或不可中断状态的进程数。可运行进程要么当前正在处理器上执行,要么等待等待处理器空闲。不可中断状态正在等待 IO 完成 - 它不是“不可中断睡眠” - 从技术上讲,进程处于“睡眠”状态,但它正在等待内核调用完成。

基本上,它是当前正在“执行某项操作”的进程数,但请记住,它是一个平均的在过去 1/5/15 分钟内 - 它不是瞬时值。这与进程列表形成对比,后者是 top 收集其信息时的快照。进程每秒唤醒和休眠多次,因此没有简单的方法将正常活动与平均负载关联起来,除非您非常幸运,进程始终处于活动状态,或者出现 IO 问题。

举个例子,top 输出的第一行显示一个当前不可运行的进程,但自上次 top 收集其统计信息以来,该进程已使用了 9% 的 CPU

平均负载不会根据操作系统可用的内核数量进行缩放 - 平均负载为 1 表示 1 个 CPU 处于 100% 繁忙状态(因此单核系统处于固定状态,而四核系统的利用率为 25%)。根据我的经验,平均负载达到系统内核数量的 75% 通常不算太糟。

答案2

平均负载是运行队列长度与当前 CPU 上运行的作业数的总和。

摘自《UNIX Power tools》一书:

平均负载试图测量任意时刻的活动进程数。作为 CPU 利用率的衡量指标,平均负载过于简单,定义不明确,但绝非毫无用处

(procs-r +1)+ procs-b :嗯。

要了解平均负载,请阅读本文本文

相关内容