Linux系统负载相关知识汇总

前段时间正好对系统负载这个概念感兴趣 。就做了一些小的研究 。比较详细的了解这个概念 。这里是我对Linux负载相关的知识的一些整理,记载在博客里,方便以后查看,也希望对其他人有用 。
本文的内容结构如下:
一: 什么是系统平均负载
二: 怎么查看系统负载
三: 怎么判断系统负载是否过重
【Linux系统负载相关知识汇总】四: 系统负载是怎么计算出来的
一: 什么是系统平均负载
以下内容是针对Linux下进行讨论的 。Linux Load average ,即系统平均负载 。系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数 。
有几个基本概念:(以下内容引用自: http://www.cnblogs.com/amsun/p/3155246.html)

  • Load 指的是运行队列(run-queue)的长度:L = 等待进程的数目 + 运行进程的数目
  • Load Average指的是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息 。
  • Load Average反映了CPU的使用情况和申请情况.
虽然系统负载反应了cpu的使用情况和申请情况,但是cpu利用率和系统负载又是有区别的 。
  • Load Average所包含的信息不是CPU的使用率状况
  • 多任务环境下,系统分配时间片以后,是否使用完全使用时间片取决于进程,因此完全可能出现低CPU利用率而高Load Average的情况
二: 怎么查看系统负载
目前Linux上有三个命令(top,w,uptime),可以查看系统负载 。
load average: 0.00, 0.01, 0.05
这三个数字,分别表示1分钟,5分钟,15分钟内的系统的平均负荷 。
额外补充一种查看系统负载的方法: cat /proc/loadavg
三: 怎么判断系统负载是否过重
在阮一峰老师的博客里有比较好的介绍,他分别针对单CPU,多CPU, CPU多核三种情况来做讨论 。他做了一个类别,把cpu比做大桥,单cpu就是单车道,类似的多CPU或者CPU有多个核,就是多车道 。下面直接引用他的描述
(http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html):
那么,我们不妨把这个CPU想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过 。(很显然,这座桥只能单向通行 。)
系统负荷为0,意味着大桥上一辆车也没有 。
系统负荷为0.5,意味着大桥一半的路段有车 。
系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经”满”了 。但是必须注意的是,直到此时大桥还是能顺畅通行的 。
系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70% 。以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍 。总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久 。
CPU的系统负荷,基本上等同于上面的类比 。大桥的通行能力,就是CPU的最大工作量;桥梁上的车辆,就是一个个等待CPU处理的进程(process) 。
如果CPU每分钟最多处理100个进程,那么系统负荷0.2,意味着CPU在这1分钟里只处理20个进程;系统负荷1.0,意味着CPU在这1分钟里正好处理100个进程;系统负荷1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理 。
为了电脑顺畅运行,系统负荷最好不要超过1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理 。很显然,1.0是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了 。

推荐阅读