据我所知,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% 通常不算太糟。