一文带你全面了解 Load Average (负载)(loadaverage)

一文带你全面了解 Load Average (负载)(loadaverage) 目录: 1、什么是 load average? 2、如何查看 load average? 3、对负载的理解 4、实

一文带你全面了解 Load Average (负载)(loadaverage)

目录:

1、什么是 load average?

2、如何查看 load average?

3、对负载的理解

4、实际运维工作的指导意义

测试场景1:对不同核数的机器施加同样的压力 测试场景2:对同一台机器增加一倍的压力 测试场景3:对同样的机器,运行单线程和多线程程序

5、Load Average在故障排查时的运用

一、什么是 load average?

维基百科定义:In Unix computing, the system load is ameasure of the amount of computational work that a computer system performs. 可以看到,load average 是计算机工作量的度量。

二、如何查看 load average?

通过系统命令:

上面内容显示系统负载为“0.16, 0.45, 0.38”,这3个值是什么意思呢?

第一个表示最近1分钟平均负载 第二个表示最近5分钟平均负载 第三个表示最近15分钟平均负载 三、对负载的理解

可以将CPU负载理解为车道的负载,对单车道而言:

如果路面上的车不多,没有占满车道,那么load < 1; 如果占满了车道,load = 1; 如果车道外面还有车在等待,load > 1;

需要注意的是,load = 1 不代表CPU无法工作了,这只是表示满负荷运行,例如实际生活中的例子,车道占满了,但是车流还能有序前进。

四、实际运维工作的指导意义

实际工作环境中,面对的是不同性能(核数,超频)的机器,不同模型的程序(单线程、多线程、分布式),不同部署方式的业务(只部署数据库、webserver、混部),所以搞清楚不同场景下load average 是如何工作的对于问题排查,服务健康检测都是很有必要的,下面通过几种场景来说明。

CPU压力简单模拟,对随机数的随机次方累积求和,代码如下图,

测试机器A:48核,测试机器B:24核。

测试场景1:对不同核数的机器施加同样的压力

结论:

1、同等压力下,不论核数多少,load average数值是一样的,但是cpu idle 不一样,核数多的机器空闲率高,可以承载更多的计算任务。

2、单线程任务只会使用一个CPU,不管CPU核数有多少。

测试场景2:对同一台机器增加一倍的压力,即同时启动两个计算任务

结论:

1、对于相同的机器,压力增大一倍,load average 相应增大一倍;

从理论上来讲,让load average 保持在 “load average数字/CPU核数”, 在0.00-1.00之间,表示CPU处于高利用率而又不是负载过高,是较为理想的值;

多核CPU,满负荷状态的数字为 “1.00 * CPU核数”,即双核CPU为2.00,四核CPU为4.00。

2、再次印证:单线程任务只会使用一个CPU,不管CPU核数有多少。

场景3:对同样的机器,运行单线程和多线程程序

请参考后一章

五、Load Average在故障排查时的运用

实际工作中,经常会遇到服务响应慢的问题,如果熟悉Load Average和CPU、IO之间的关系,一般可以快速定位问题。

5.1、状态为R和D的任务

状态为R,表示正在运行,或者处于运行队列,可以被调度运行。

状态为D,表示 uninterruptible sleep,这种状态是不可中断的,无论是kill,kill -9,还是kill -15。

处于D状态的进程通常是在等待IO,比如磁盘 IO,网络 IO,其他外设 IO。

如果处于D状态的时间较长,意味着可能是IO设备本身出了故障,需要排查设备是否正常。

5.2、CPU使用率高,IO无作业,Load Average低,系统反应颠簸

这种场景,通常是计算密集型任务,即大量生成耗时短的计算任务。

这种任务会占满CPU资源,造成系统响应速度颠簸,但由于每个任务能快速计算完成,不会在运行队列堆积,所以在Load Average里不会体现出来。

python示例程序占满CPU,但LoadAvergae 不高

5.3、CPU使用率低,IO等待,Load Average高,系统不卡

Load Average高,dd程序都处于D状态

示例命令,大量写小文件: dd if=/dev/zero of=testx.img bs=512count=1000000 oflag=dsync

这种场景,通常是IO密集型任务,如果大量请求都集中于相同的IO设备,超出设备的响应能力,会造成任务在运行队列里堆积等待,也就是D状态的进程堆积,那么此时Load Average就会飙高。

由于任务都处于等待状态,所以Load Average的值虽然很高,但系统响应速度不受影响。

5.4、CPU使用率低,IO繁忙,Load Average低,系统卡

这种场景,通常是低频大文件读写,由于请求数量不大,所以任务都处于R状态,Load Average数值反映了当前运行的任务数,不会飙升,IO设备处于满负荷工作状态,导致系统响应能力降低。

IO设备满负荷工作

示例命令,少量写大文件:dd if=/dev/zero of=testx.img bs=5120000count=10000 oflag=dsync

dd程序都处于R状态

5.5、CPU使用率高,IO繁忙/等待,Load Average高,系统卡

这种场景,通常是服务混部,即IO、计算密集型任务混部在一起,相当于CPU、IO都处于高负荷状态,那么Load Average 自然很高。

总结

可以根据业务的特性(CPU、IO密集型、两者混部),在系统响应速度异常时,快速定位原因。本文通过简单命令模拟了业务的类型,介绍了相应的思路,读者可结合自己所运维的业务实践一下。

本文转载自公众号「曲行人」

2018年,GOPS 全球运维大会第一站:深圳站

—— AIOps 风向标

1个月。

3人以上团购优惠请联系刘静:130 2108 2989

商务合作请联系刘欣:158 0111 5386

为了避免权属纠纷,特做如下说明:本站内容作品来自用户分享及互联网,仅供参考,无法核实真实出处,并不代表本网站赞同其观点和对其真实性负责,本网站仅提供信息存储空间服务,我们致力于保护作者版权,如果发现本站有涉嫌侵权的内容,欢迎发送邮件至youxuanhao@qq.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

原文标题:一文带你全面了解 Load Average (负载)(loadaverage)

Like (0)
Previous 1小时前
Next 1小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:youxuanhao@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信