我想了解一个Linux服务器上的系统负载:
$uptime 15:01:45 up 52 days, 19:48, 1 user, load average: 0.63, 1.76, 4.81
负载总是1分钟<5分钟<15分钟。
Distributor ID: RedHatEnterpriseServer Release: 5.8
我每秒捕获uptime大约30分钟,总是报告1分钟的平均时间低于5分钟15分钟。 根据我对系统负载值的理解,这是不可能的。 似乎有更多的数字报道了一些增加的常数。
这怎么可能,这是什么意思?
我认为你可能误解了“平均负载”是如何工作的。 首先不是系统“加载”它是系统的“平均负载” – 有一个很大的差异,因为数字是所有的平均值(意味着跨越多个logging和时间)! 此外,知道系统中CPU的数量也是非常重要的,因为这会影响到如何解释数字(注意当天和时代的内核)。
另外请注意,你不能使用这些数字作为“CPU使用率”,就像你从窗口等知道它们一样。它们是平均值,并且基于进程等待时间和CPU使用情况。
正如你自己写的那样,负载平均数可以描述如下。
(请注意,我不使用>也不是<我认为这可能是误导。
让我们对我的小型双CPU(核心)系统进行testing。
我运行命令“stress -c 1”来最大化1个cpu(核心),让它运行5,10,30分钟(cpu的使用时间可能会less一些,因此数字略有偏差)。
这是我的负载平均值的样子。
5 MIN - load average: 1,00, 0,71, 0,37 10 MIN - load average: 1,02, 0,94, 0,59 30 MIN - load average: 1,01, 1,03, 0,98
那么数字是什么意思? 给出它是在一个双CPU(核心)系统,你可以采取第一个数字1,00,这告诉我们,系统被使用了50%,因为我们知道它有两个CPU,因此,如果这个数字是2,00那么我们在哪里使用系统100%,十进制数字告诉你等待进程的过载。
等等。 让我们做同样的运行,但两个CPU的负载,并添加一个额外的孩子试图占用资源。 在这种情况下,我试图使用超过我的系统可以处理。
在3分钟内,我的负载已经尖叫着对我! 现在我不会让这个运行更长时间,因为它是一个小型的路由器testing负载更容易,所以它变得越来越热:)
3 MIN - load average: 2,48, 0,99, 0,74
现在我们以1分钟的平均数字2,48。 这是什么现在告诉我们? 那么我们正在使用248%的系统,我们知道我们可以使用两个CPU(200%),所以系统超载了48%,这意味着0.48个进程平均等待CPU使用时间,因为两个CPU完全忙。 但是如果这是一个4 CPU(核心)系统,那么这个数字就相当不错了,因为我们只用了50%的系统。
我希望这一切都是有道理的,分布之间也可以有一些细微的差异,说明它们的内核如何解释负载平均值,但不像你想象的那样。 这就是内核如何查看进程的状态。像cpu_idle,cpu_waiting,io_waiting等等。 所以NFS fs可以让进程等待io等。我不认为RedHat做了什么特别的事情。
编辑:如果你想看看整个系统的CPU使用情况,你可能想使用命令“顶部”。 Top也显示负载平均值。