Linux系统负载相关知识汇总
来源:互联网 发布:模特 李荣浩 知乎 编辑:程序博客网 时间:2024/06/07 15:17
前段时间正好对系统负载这个概念感兴趣。 就做了一些小的研究。 比较详细的了解这个概念。 这里是我对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是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。
通常情况下, 对于单CPU的情况,
如果load average 大于 0.7 ,就要开始引起系统管理员注意, 查找问题所在;
大于1.0, 就要寻找解决方法;
大于5.0,表明系统的问题已经很严重了, 可能会死机。
对于多CPU或者多核的情况, 请乘以对应的倍数来判断。
另外,由于在Linux中,会返回三个时间的观察值,那么就存在一个问题,就是我要以哪个时长的观察值为准了。 在阮一峰老师的博文中也给出了建议:
如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。
四: 系统负载是怎么计算出来的
为了搞清楚系统负载是怎么算出来的, 我又在网上找到了一些资料。 计算公式涉及了高等数学的运算,如果对此不感兴趣,可以直接跳过。
通过查看Linux源码, 可以得到, Linux计算系统平均负载的公式为:
load(t) = load(t-1) e^(-5/60) + n (1 - e^(-5/60))
其中,exp(x)为e的x次幂,
n为当前运行队列的长度。
Linux内核认为进程的生存时间服从参数为1的指数分布,
指数分布的概率密度为:以内核计算负载load1为例,设相邻两个计算时刻之间系统活动的进程集合为S0。
从1分钟前到当前计算时刻这段时间里面活动的load1个进程,设他们的集合是 S1,内核认为的概率密度是:λe-λx,
而在当前时刻活动的n个进程,设他们的集合是Sn内核认为的概率密度是1-λe-λx。
其中x = 5 / 60,因为相邻两个计算时刻之间进程所耗的CPU时间为5秒,而考虑的时间段是1分钟(60秒)。
那么可以求出最近1分钟系统运行队列的长度:
load1 = |S1| -* λe-λx + |Sn| * (1-λe-λx) = load1 * λe-λx + n * (1-λe-λx)
其中λ = 1, x = 5 / 60, |S1|和|Sn|是集合元素的个数,这就是Linux内核源文件shed.c的函数calc_load()计算负载的数学依据。
【参考文献】
1. http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
2. http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html
3. http://www.penglixun.com/tech/system/how_to_calc_load_cpu.html
4. http://www.cnblogs.com/amsun/p/3155246.html
5. http://www.ccvita.com/354.html
<<<<<<<<< 全文完 >>>>>>>>>
文章首发于我的个人网站 : www.hackstoic.com
- Linux系统负载相关知识汇总
- Linux系统小知识汇总
- linux 系统监控负载命令汇总
- Linux 系统相关知识记录
- 服务器负载相关知识
- Linux查看系统负载相关命令
- IT系统运维监控--相关知识汇总
- 索引相关知识汇总
- 磁盘阵列相关知识汇总
- ext相关知识汇总
- 监听器相关知识汇总
- 过滤器相关知识汇总
- Servlet相关知识汇总
- CDN 相关知识汇总
- Logback相关知识汇总
- xserver相关知识汇总
- Linux kernel 日志系统printk相关知识
- Linux 系统及编程相关知识总汇
- C语言<string.h>之strtok函数
- Mathematica求函数最大值
- 程序员技术练级攻略
- FindBugs规则整理
- CSS样式--实际开发总结
- Linux系统负载相关知识汇总
- 彻底删除控件
- 随记
- 关于post与get方法的区别
- ThinkPHP快速入门2-CURD,查询
- 策略模式
- 如果图G=<V,E>是哈密尔顿图,则它必然具备下述性质
- 随机数获取
- NLPIR分词乱码问题