据我所知,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
它基于处于可运行或不可中断状态的进程数。Runnable 当前正在处理器上执行,或者正在等待处理器空闲。不可中断状态正在等待 IO 完成——它不是“不可中断睡眠”——进程在技术上是“睡眠”,但它正在等待内核调用完成。
基本上它是当前“正在做某事”的进程数,但请记住,它是过去 1/5/15 分钟的平均值——它不是瞬时值。这与进程列表形成对比,进程列表是 top 收集其信息时的即时快照。进程每秒唤醒和休眠多次,因此没有简单的方法将正常活动与平均负载关联起来,除非你真的很幸运,进程总是处于活动状态,或者 IO 有问题。
作为这方面的一个例子——top 输出的第一行显示了一个当前不可运行的进程,但自上次 top 收集其统计信息以来已经使用了 9% 的 CPU
负载平均值未根据操作系统可用的内核数量进行缩放 - 平均值为 1 表示 1 个 CPU 100% 忙(因此固定了单核系统,但四核系统的利用率为 25%)。根据我的经验,平均负载达到系统内核数的 75% 通常并不算太糟糕。
平均负载是运行队列长度和当前在 CPU 上运行的作业数的总和。
摘自《UNIX 强大工具》一书:
要了解平均负载请阅读这篇文章和这篇文章。