一 配置信息:
hostname:load-exam-03
ip:10.100.213.28
config:4c8G
二 都在说“平均负载”,何为平均负载
拿个例子:
[root@load-exam-03 ~]# uptime 13:56:46 up 197 days, 3:08, 1 user, load average: 139.97, 135.86, 132.39
是指cpu的使用率吗?eg:上面的139.97是指:cpu使用率是139.97%。答案是否定的。
执行man uptime就可以看到它的解释:
[root@load-exam-03 ~]# man uptime System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normal‐ ized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.
即:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,他和cpu使用率并没有直接关系。
两个名词的解释:
可运行状态:正在使用cpu和正在等待cpu的进程,也就是ps命令看到的处于R状态(Running或者Runnable)的进程。
不可中断状态:正处于内核态关键流程中的进程,这些进程是不可打断的,eg:等待硬件设备的I/O响应,也就是ps aux中看到的D状态(Uninterruptible Sleep也成为Disk Sleep)的进程。
一个很好的例子:进程想磁盘写数据时,在得到磁盘回复前,该进程是不能被打断的,这个时候该进程就处于不可中断状态,如果被打断磁盘和进程中的数据就不一致了。
不可中断状态实际上是系统对进程和硬件的一种保护机制。
eg:平均负载为2:
在有1个cpu的系统的系统中,有一半的进程竞争不到cpu
在有2个cpu的系统的系统中,cpu被刚好完全占用
在有4个cpu的系统的系统中,cpu有50%的空闲
当平均负载高于cpu数量70%的时候,就应该分析排查负载高的问题了。eg:上面我的系统是4C,如果平均负载达到670%时,就的关注了。
三 cpu使用率
单位时间内cpu繁忙情况的统计。
四 平均负载和cpu使用率
理解了平均负载和cpu使用率,你就会发现他两并不完全对应,大体分为以下三类:
1 cpu密集型进程:使用大量cpu会导致平均负载升高,此时两者一致
2 I/O密集型进程,等待I/O也会导致平均负载升高,但cpu使用率不一定升高
3 大量等待CPU的进程调度也会导致平均负载升高,此时两者一致
五 案例分析
三工具:iostat、mpstat、pidstat
yum install stress sysstat -y
介绍:
stress:linux系统压力测试工具
mpstat:实时查看每个cpu的性能指标,以及所有cpu的性能指标
pidstat:进程性能分析工具,查看进程的cpu、内存、I/O,上下文切换等性能指标。
案例一:cpu密集型进程
[root@xpro-load-exam-02 ~]# stress --cpu 1 --timeout 600 stress: info: [1713] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
(模拟一个cpu使用率100%的场景。)
[root@xpro-load-exam-02 ~]# watch -d uptime Every 2.0s: uptime Tue Dec 4 14:55:36 2018 14:55:36 up 197 days, 4:07, 3 users, load average: 0.85, 0.80, 0.52
14:58:06 up 197 days, 4:10, 3 users, load average: 1.05, 0.90, 0.60
(-d:高亮显示变化的区域。会发现1分钟内的平均负载逐渐变成1。查看平均负载情况)
[root@xpro-load-exam-02 ~]# mpstat -P ALL 5 Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02) 12/04/2018 _x86_64_ (4 CPU) 02:58:34 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 02:58:39 PM all 21.77 0.00 0.16 0.00 0.00 0.00 0.05 0.00 0.00 78.02 02:58:39 PM 0 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 02:58:39 PM 1 0.20 0.20 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 02:58:39 PM 2 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80 02:58:39 PM 3 99.76 0.00 0.00 0.00 0.00 0.00 0.24 0.00 0.00 0.00 02:58:39 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 02:58:44 PM all 22.43 1.45 0.88 0.00 0.00 0.00 0.05 0.00 0.00 75.18 02:58:44 PM 0 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 02:58:44 PM 1 0.20 4.02 1.41 0.00 0.00 0.00 0.00 0.00 0.00 94.37 02:58:44 PM 2 0.20 1.40 1.40 0.00 0.00 0.00 0.20 0.00 0.00 96.79 02:58:44 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:58:44 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 02:58:49 PM all 21.82 0.05 0.26 0.00 0.00 0.00 0.00 0.00 0.00 77.86 02:58:49 PM 0 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60 02:58:49 PM 1 0.20 0.20 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 02:58:49 PM 2 0.20 0.20 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 02:58:49 PM 3 99.76 0.00 0.00 0.00 0.00 0.00 0.24 0.00 0.00 0.00
(可以发现有一个cpu的使用率接近100%,但是它的iowait只有0,这说明平均负载的升高正是由于cpu的使用率为100%。
-P ALL表示监控所有的cpu,5表示每隔5秒后输出一组数据。)
[root@xpro-load-exam-02 ~]# pidstat -u 5 1 Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02) 12/04/2018 _x86_64_ (4 CPU) 03:01:24 PM UID PID %usr %system %guest %CPU CPU Command 03:01:29 PM 0 1714 99.80 0.00 0.00 99.80 2 stress 03:01:29 PM 0 3409 0.00 0.20 0.00 0.20 3 pidstat 03:01:29 PM 0 7293 0.00 0.20 0.00 0.20 1 monitor-agent 03:01:29 PM 0 22282 0.60 0.20 0.00 0.80 1 filebeat 03:01:29 PM 0 25454 0.20 0.00 0.00 0.20 1 cetus_agent 03:01:29 PM 995 26372 0.20 0.00 0.00 0.20 1 zabbix_agentd Average: UID PID %usr %system %guest %CPU CPU Command Average: 0 1714 99.80 0.00 0.00 99.80 - stress Average: 0 3409 0.00 0.20 0.00 0.20 - pidstat Average: 0 7293 0.00 0.20 0.00 0.20 - monitor-agent Average: 0 22282 0.60 0.20 0.00 0.80 - filebeat Average: 0 25454 0.20 0.00 0.00 0.20 - cetus_agent Average: 995 26372 0.20 0.00 0.00 0.20 - zabbix_agentd
(可以看到stress进程的cpu使用率为100%。)
案例二:I/O密集型进程
[root@xpro-load-exam-02 ~]# stress -i 1 --timeout 600 stress: info: [5610] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
(模拟I/O压力,即不停的执行sync。)
[root@xpro-load-exam-02 ~]# watch -d uptime Every 2.0s: uptime Tue Dec 4 15:12:53 2018 15:12:53 up 197 days, 4:25, 3 users, load average: 0.74, 0.43, 0.51
15:13:37 up 197 days, 4:25, 3 users, load average: 0.88, 0.51, 0.53
(会发现1分钟内的平均负载逐渐变成1。查看平均负载情况)
[root@xpro-load-exam-02 ~]# mpstat -P ALL 5 Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02) 12/04/2018 _x86_64_ (4 CPU) 03:36:59 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:37:04 PM all 0.31 0.05 22.26 0.05 0.00 0.00 0.05 0.00 0.00 77.27 03:37:04 PM 0 0.40 0.00 0.40 0.00 0.00 0.00 0.20 0.00 0.00 98.99 03:37:04 PM 1 0.00 0.00 97.69 0.00 0.00 0.00 0.23 0.00 0.00 2.08 03:37:04 PM 2 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 03:37:04 PM 3 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 03:37:04 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:37:09 PM all 0.15 0.05 23.52 0.00 0.00 0.00 0.00 0.00 0.00 76.28 03:37:09 PM 0 0.40 0.00 0.81 0.00 0.00 0.00 0.00 0.00 0.00 98.79 03:37:09 PM 1 0.00 0.00 96.58 0.00 0.00 0.00 0.00 0.00 0.00 3.42 03:37:09 PM 2 0.00 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.60 03:37:09 PM 3 0.20 0.20 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20 03:37:09 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:37:14 PM all 0.20 0.05 23.83 0.05 0.00 0.00 0.05 0.00 0.00 75.81 03:37:14 PM 0 0.20 0.00 0.81 0.00 0.00 0.00 0.00 0.00 0.00 98.99 03:37:14 PM 1 0.00 0.00 94.65 0.21 0.00 0.00 0.00 0.00 0.00 5.14 03:37:14 PM 2 0.20 0.20 0.60 0.00 0.00 0.00 0.00 0.00 0.00 98.99 03:37:14 PM 3 0.40 0.20 0.60 0.00 0.00 0.00 0.20 0.00 0.00 98.59
(从图可以看出%sys,内核态占用cpu达到94.65%。)
[root@xpro-load-exam-02 ~]# pidstat -u 5 1 Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02) 12/04/2018 _x86_64_ (4 CPU) 03:36:11 PM UID PID %usr %system %guest %CPU CPU Command 03:36:16 PM 0 8913 0.00 0.60 0.00 0.60 2 kworker/u8:2 03:36:16 PM 0 10487 0.00 1.40 0.00 1.40 2 kworker/u8:0 03:36:16 PM 0 11490 0.00 97.01 0.00 97.01 1 stress 03:36:16 PM 0 11491 0.00 97.01 0.00 97.01 2 stress 03:36:16 PM 0 11600 0.00 0.20 0.00 0.20 3 pidstat 03:36:16 PM 0 22282 0.80 0.20 0.00 1.00 2 filebeat 03:36:16 PM 995 26370 0.00 0.20 0.00 0.20 0 zabbix_agentd Average: UID PID %usr %system %guest %CPU CPU Command Average: 0 8913 0.00 0.60 0.00 0.60 - kworker/u8:2 Average: 0 10487 0.00 1.40 0.00 1.40 - kworker/u8:0 Average: 0 11490 0.00 97.01 0.00 97.01 - stress Average: 0 11491 0.00 97.01 0.00 97.01 - stress Average: 0 11600 0.00 0.20 0.00 0.20 - pidstat Average: 0 22282 0.80 0.20 0.00 1.00 - filebeat Average: 995 26370 0.00 0.20 0.00 0.20 - zabbix_agentd
(可以看出负载过高是由于stree进程导致的。)
案例三:大量进程的场景
[root@xpro-load-exam-02 ~]# stress -c 16 --timeout 600 stress: info: [13110] dispatching hogs: 16 cpu, 0 io, 0 vm, 0 hdd
(系统cpu个数:8个,开启进程数16个,系统cpu处于过载状态。)
[root@xpro-load-exam-02 ~]# watch -d uptime Every 2.0s: uptime Tue Dec 4 15:46:09 2018 15:46:09 up 197 days, 4:58, 3 users, load average: 18.00, 10.49, 4.85
15:46:20 up 197 days, 4:58, 3 users, load average: 18.07, 10.75, 4.99
(负载过高。)
03:46:25 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:46:30 PM all 99.79 0.10 0.05 0.00 0.00 0.00 0.05 0.00 0.00 0.00 03:46:30 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:30 PM 1 99.78 0.22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:30 PM 2 99.60 0.20 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:30 PM 3 99.80 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:30 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:46:35 PM all 99.69 0.10 0.16 0.00 0.00 0.00 0.05 0.00 0.00 0.00 03:46:35 PM 0 99.79 0.00 0.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:35 PM 1 99.40 0.40 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:35 PM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:35 PM 3 99.79 0.00 0.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:35 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:46:40 PM all 99.79 0.10 0.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:40 PM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:40 PM 1 99.36 0.43 0.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:40 PM 2 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:40 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:40 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:46:45 PM all 99.74 0.10 0.10 0.00 0.00 0.00 0.05 0.00 0.00 0.00 03:46:45 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:45 PM 1 99.59 0.21 0.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:45 PM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:46:45 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: UID PID %usr %system %guest %CPU CPU Command Average: 0 17 0.00 0.20 0.00 0.20 - rcuos/3 Average: 0 13111 24.16 0.00 0.00 24.16 - stress Average: 0 13112 23.96 0.00 0.00 23.96 - stress Average: 0 13113 23.96 0.00 0.00 23.96 - stress Average: 0 13114 24.16 0.00 0.00 24.16 - stress Average: 0 13115 23.96 0.00 0.00 23.96 - stress Average: 0 13116 24.36 0.00 0.00 24.36 - stress Average: 0 13117 23.96 0.00 0.00 23.96 - stress Average: 0 13118 27.52 0.00 0.00 27.52 - stress Average: 0 13119 27.13 0.00 0.00 27.13 - stress Average: 0 13120 23.96 0.00 0.00 23.96 - stress Average: 0 13121 24.75 0.00 0.00 24.75 - stress Average: 0 13122 24.75 0.00 0.00 24.75 - stress Average: 0 13123 24.55 0.00 0.00 24.55 - stress Average: 0 13124 24.36 0.00 0.00 24.36 - stress Average: 0 13125 24.36 0.00 0.00 24.36 - stress Average: 0 13126 24.75 0.00 0.00 24.75 - stress Average: 0 13646 0.00 0.20 0.00 0.20 - pidstat Average: 0 20287 0.20 0.00 0.00 0.20 - inf-agent-guard Average: 0 22282 0.79 0.00 0.00 0.79 - filebeat
(stess导致系统负载过高。)
好了,到这有关平均负载的知识就差不多完了。
为了帮助你理解,这里有个比喻,如果不够形象,欢迎指正:
以地铁为例,地铁的乘客容量就是cpu个数,正在使用CPU的进程就是在地铁上的人,等待cpu的进程就是在下一站等地铁来的人,等待I/O的进程就是下一站要上车和下车的人,
虽然现在对cpu没有影响,但未来会影响,所以也要考虑到平均负载上。
补充:部分人可能对上面“案例二”有疑问,因为实验结果和结论似乎互相矛盾了,其实这是因为工具的问题,stree模拟的场景是使用sync()系统调用,它的作用是刷新缓冲区内存
到磁盘中。对于我上面实验的虚机比较新,缓冲区很小很小,无法产生IO压力,我们换个工具stress的加强版stess-ng来模拟这个场景,安装也方便:
案例二:I/O密集型进程:
yum install stress-ng -y
[root@xpro-load-exam-02 ~]# stress-ng -i 1 --hdd 1 --timeout 600
[root@xpro-load-exam-02 ~]# watch -d uptime Every 2.0s: uptime Wed Dec 5 11:03:35 2018 11:03:35 up 198 days, 15 min, 3 users, load average: 0.87, 0.71, 0.65
11:03:43 up 198 days, 15 min, 3 users, load average: 1.20, 0.79, 0.67
11:04:15 up 198 days, 16 min, 3 users, load average: 1.90, 1.00, 0.75
[root@xpro-load-exam-02 ~]# mpstat -P ALL 5 11:04:29 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:04:34 AM all 0.31 0.00 19.43 19.38 0.00 0.00 0.05 0.00 0.00 60.84 11:04:34 AM 0 0.20 0.00 5.23 9.86 0.00 0.00 0.00 0.00 0.00 84.71 11:04:34 AM 1 0.41 0.00 10.16 51.42 0.00 0.00 0.00 0.00 0.00 38.01 11:04:34 AM 2 0.20 0.20 9.76 15.85 0.00 0.00 0.00 0.00 0.00 73.98 11:04:34 AM 3 0.42 0.00 53.78 0.00 0.00 0.00 0.00 0.00 0.00 45.80 11:04:34 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:04:39 AM all 0.26 0.05 18.01 19.86 0.00 0.00 0.05 0.00 0.00 61.77 11:04:39 AM 0 0.20 0.00 10.91 46.26 0.00 0.00 0.20 0.00 0.00 42.42 11:04:39 AM 1 0.00 0.00 3.64 17.98 0.00 0.00 0.00 0.00 0.00 78.38 11:04:39 AM 2 0.40 0.00 9.84 14.06 0.00 0.00 0.20 0.00 0.00 75.50 11:04:39 AM 3 0.21 0.00 49.46 0.00 0.00 0.00 0.21 0.00 0.00 50.11 11:04:39 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:04:44 AM all 0.31 1.37 16.40 20.98 0.00 0.00 0.00 0.00 0.00 60.95 11:04:44 AM 0 0.20 0.00 6.05 32.66 0.00 0.00 0.00 0.00 0.00 61.09 11:04:44 AM 1 0.40 1.81 4.42 42.77 0.00 0.00 0.00 0.00 0.00 50.60 11:04:44 AM 2 0.20 0.60 8.63 7.43 0.00 0.00 0.00 0.00 0.00 83.13 11:04:44 AM 3 0.42 3.59 47.99 0.00 0.00 0.00 0.00 0.00 0.00 47.99
[root@xpro-load-exam-02 ~]# pidstat -u 5 1 Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02) 12/05/2018 _x86_64_ (4 CPU) 11:05:44 AM UID PID %usr %system %guest %CPU CPU Command 11:05:49 AM 0 4138 0.20 51.50 0.00 51.70 1 stress-ng-hdd 11:05:49 AM 0 4139 0.00 8.58 0.00 8.58 0 stress-ng-io 11:05:49 AM 0 4140 0.00 3.79 0.00 3.79 2 kworker/2:0 11:05:49 AM 0 4153 0.00 7.39 0.00 7.39 0 kworker/u8:1 11:05:49 AM 0 4239 0.00 0.20 0.00 0.20 3 watch 11:05:49 AM 0 4816 0.00 0.20 0.00 0.20 2 pidstat 11:05:49 AM 0 6308 0.00 2.40 0.00 2.40 0 kworker/0:1 11:05:49 AM 0 22282 0.60 0.40 0.00 1.00 3 filebeat 11:05:49 AM 0 25449 0.00 0.20 0.00 0.20 2 mon_cetus.sh 11:05:49 AM 0 25454 0.20 0.00 0.00 0.20 1 cetus_agent Average: UID PID %usr %system %guest %CPU CPU Command Average: 0 4138 0.20 51.50 0.00 51.70 - stress-ng-hdd Average: 0 4139 0.00 8.58 0.00 8.58 - stress-ng-io Average: 0 4140 0.00 3.79 0.00 3.79 - kworker/2:0 Average: 0 4153 0.00 7.39 0.00 7.39 - kworker/u8:1 Average: 0 4239 0.00 0.20 0.00 0.20 - watch Average: 0 4816 0.00 0.20 0.00 0.20 - pidstat Average: 0 6308 0.00 2.40 0.00 2.40 - kworker/0:1 Average: 0 22282 0.60 0.40 0.00 1.00 - filebeat Average: 0 25449 0.00 0.20 0.00 0.20 - mon_cetus.sh Average: 0 25454 0.20 0.00 0.00 0.20 - cetus_agent
对比上面三张图可以返现,IO一度很高达到51.42%,但此时的cpu使用率却不是很高,只有62%。