这里我说的不会很晦涩难懂,争取用很容易理解的方式展示我学习后的理解
1.首先介绍下stress命令参数,下面我们会使用到
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n 显示已完成的指令情况
-t --timeout N 指定运行 N 秒后停止
--backoff N 等待 N 微秒后开始运行
-c 产生 n 个进程,每个进程都反复不停的计算随机数的平方根
-i 产生 n 个进程,每个进程反复调用 sync(), sync() 用于将内存上的内容写到硬盘上
-m --vm n 产生 n 个进程,每个进程不断调用内存分配 malloc 和内存释放 free 函数
--vm-bytes B 指定 malloc 时内存的字节数 (默认 256MB)
--vm-hang N 指定在 free 栈的秒数
-d --hadd n 产生 n 个执行 write 和 unlink 函数的进程
--hadd-bytes B 指定写的字节数
--hadd-noclean 不 unlink
2.初识平均负载
[root@m01 ~]# uptime
14:38:11 up 2:10, 4 users, load average: 0.00, 0.00, 0.00
14:38:11 up //系统当前时间
up 2:10 //系统运行了多久
4 users //这里我是用root用户登录,打开了四个窗口
load average: 0.00, 0.00, 0.00 //分别是系统过去1分钟,5分钟,15分钟的负载
平均负载是什么?
平均负载是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,即系统中单位时间内的活跃进程数。可运行状态的进程:
正在使用CPU或正在等待CPU的进程。即ps命令中,stat处于R(Running|Runnable)的进程
不可中断的进程:
例如在进行磁盘读写的进程,此时为了保证数据的完整性,会使进程的状态设置为D,即不可被中断,如果被中断了,数据是不会被完整保存的。
不可中断状态是系统对进程和硬件设备的一种保护机制。
"R状态的演示查看"
在我的系统中,我使用yum安装了一下zlib*,并且安装了zabbix客户端,但zabbix服务端并没有启动。
根据ps -aux查看到,zabbix客户端是处于S状态,并不是一个活跃的正在工作的进程。yum命令如果你仔细观察,会发现,在install的过程,是处于R状态,但这个状态很短暂,任务完成,就处于S状态了。
[root@m01 ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 19356 1532 ? Ss 12:27 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:27 0:00 [kthreadd]
zabbix 1203 0.0 0.0 76836 1228 ? S 12:27 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 1205 0.0 0.0 76836 1328 ? S 12:27 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 1206 0.0 0.0 76836 1956 ? S 12:27 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 1207 0.0 0.0 76836 1956 ? S 12:27 0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 1208 0.0 0.0 76836 1956 ? S 12:27 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix 1209 0.0 0.1 76840 2120 ? S 12:27 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root 1402 21.1 4.1 387784 85264 pts/1 R+ 12:45 0:08 /usr/bin/python /usr/bin/yum install -y zlib*
root 1426 0.0 0.0 110260 1156 pts/0 R+ 12:46 0:00 ps -aux
"D状态的演示查看"
在一个窗口执行
[root@m01 ~]# stress -d 1 -i 1 --hdd-bytes 3G
stress: info: [7112] dispatching hogs: 0 cpu, 1 io, 0 vm, 1 hdd
另一个窗口查看,可看到处于D状态
[root@m01 ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 1428 ? Ss 12:27 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:27 0:00 [kthreadd]
root 7113 0.5 0.0 6524 112 pts/0 D+ 14:52 0:00 stress -d 1 -i 1 --hdd-bytes 3G
root 7114 39.4 0.0 7472 1180 pts/0 D+ 14:52 0:03 stress -d 1 -i 1 --hdd-bytes 3G
3.怎样理解平均负载
当平均负载为2时
在只有两个CPU的系统上,意味着所有的CPU都被占用了
在有4个CPU的系统上,即CPU使用率为50%
在只有1个CPU的系统上,即一半的进程获取不到CPU,此时负载就比较高了
4.平均负载为多少需要注意
刚刚我们看到的三个平均负载的值,最理想的状态是平均负载的值小于等于CPU的数量,说明系统还能没有压力的完成任务,如果平均负载值大于CPU数,就说明需要注意下,如果这样持续很久,或者负载已经是CPU数的好几倍了,就要引起足够的重视了。
查看CPU数的方法,当然还有很多方法,可以用top等
[root@m01 ~]# grep 'model name' /proc/cpuinfo | wc -l
2
5.引起平均负载过高的几种情况
环境介绍:
centos6
2CPU
2G内存
需要安装stress和sysstat
"1.CPU密集型进程"
模拟CPU使用率100%的场景
"窗口1执行"
[root@m01 ~]# stress -c 1 --timeout 600
stress: info: [7188] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
"窗口2执行"
一分钟后,可看到最近一分钟的系统的负载为0.98
[root@m01 ~]# watch -d uptime
Every 2.0s: uptime Wed May 8 15:26:48 2019
15:26:48 up 2:59, 4 users, load average: 0.98, 0.57, 0.23
"窗口3查看cpu的使用情况"
可以看到,一个CPU 1的%usr为100%,说明CPU 1全部用于处理用户操作了,由于有两个CPU,所以总的CPU使用率为50%
这里的5是每隔5秒显示一次结果
[root@m01 ~]# mpstat -P ALL 5
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:23:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:23:05 PM all 50.05 0.00 0.10 0.00 0.00 0.00 0.00 0.00 49.85
03:23:05 PM 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.80
03:23:05 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:23:05 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:23:10 PM all 50.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 49.90
03:23:10 PM 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.80
03:23:10 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
"窗口4查看占用CPU较高的进程"
可以看到,是stress占用较高
[root@m01 ~]# pidstat -u 5 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:25:56 PM PID %usr %system %guest %CPU CPU Command
03:26:01 PM 1205 0.00 0.20 0.00 0.20 0 zabbix_agentd
03:26:01 PM 7189 99.80 0.00 0.00 99.80 1 stress
03:26:01 PM PID %usr %system %guest %CPU CPU Command
03:26:06 PM 7189 100.00 0.00 0.00 100.00 1 stress
Average: PID %usr %system %guest %CPU CPU Command
Average: 1205 0.00 0.10 0.00 0.10 - zabbix_agentd
Average: 7189 100.00 0.00 0.00 100.00 - stress
"2.IO密集型进程"
-i参数是把内存中的数据写入硬盘,但是当内存中没有很多数据时,io不会很大
"窗口1"
[root@m01 ~]# stress -i 1 --timeout 600
stress: info: [7547] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
"窗口2"
一分钟后,可看到最近一分钟的系统的负载为1.03
[root@m01 ~]# watch -d uptime
Every 2.0s: uptime Wed May 8 15:38:07 2019
15:38:07 up 3:10, 4 users, load average: 1.03, 0.68, 0.36
"窗口3"
可看到cpu1的%sys为 100%,CPU 1主要用于处理系统问题
[root@m01 ~]# mpstat -P ALL 5
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:33:51 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:33:56 PM all 0.10 0.00 50.05 0.00 0.00 0.00 0.00 0.00 49.85
03:33:56 PM 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.80
03:33:56 PM 1 0.20 0.00 99.80 0.00 0.00 0.00 0.00 0.00 0.00
03:33:56 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:34:01 PM all 0.20 0.00 49.70 0.00 0.00 0.00 0.00 0.00 50.10
03:34:01 PM 0 0.20 0.00 0.40 0.00 0.00 0.00 0.00 0.00 99.40
03:34:01 PM 1 0.20 0.00 99.80 0.00 0.00 0.00 0.00 0.00 0.00
03:34:01 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:34:06 PM all 0.10 0.00 49.85 0.00 0.00 0.00 0.00 0.00 50.05
03:34:06 PM 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.80
03:34:06 PM 1 0.20 0.00 99.80 0.00 0.00 0.00 0.00 0.00 0.00
"窗口4"
查看到,stres进程占用CPU较高
[root@m01 ~]# pidstat -u 5 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:36:53 PM PID %usr %system %guest %CPU CPU Command
03:36:58 PM 1058 0.00 2.60 0.00 2.60 1 flush-8:0
03:36:58 PM 1205 0.00 0.20 0.00 0.20 0 zabbix_agentd
03:36:58 PM 7190 0.20 0.00 0.00 0.20 0 watch
03:36:58 PM 7548 0.00 97.60 0.00 97.60 1 stress
03:36:58 PM PID %usr %system %guest %CPU CPU Command
03:37:03 PM 7 0.00 0.20 0.00 0.20 0 events/0
03:37:03 PM 1058 0.00 2.60 0.00 2.60 1 flush-8:0
03:37:03 PM 7548 0.20 97.40 0.00 97.60 1 stress
03:37:03 PM 7655 0.00 0.20 0.00 0.20 0 pidstat
Average: PID %usr %system %guest %CPU CPU Command
Average: 7 0.00 0.10 0.00 0.10 - events/0
Average: 1058 0.00 2.60 0.00 2.60 - flush-8:0
Average: 1205 0.00 0.10 0.00 0.10 - zabbix_agentd
Average: 7190 0.10 0.00 0.00 0.10 - watch
Average: 7548 0.10 97.50 0.00 97.60 - stress
Average: 7655 0.00 0.10 0.00 0.10 - pidstat
"查看系统IO"
此时系统IO为0
[root@m01 ~]# iostat 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.12 0.00 4.18 1.51 0.00 90.18
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.02 0.00 264 0
sda 21.61 65.08 17475.64 745996 200314900
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 50.00 0.00 0.00 50.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 50.00 0.00 0.00 49.75
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
"3.IO密集型-演示写入数据到硬盘"
"窗口1"
[root@m01 ~]# stress -d 1 --hdd-bytes 3G --timeout 600
stress: info: [7798] dispatching hogs: 0 cpu, 0 io, 0 vm, 1 hdd
"窗口2"
此时,近1分钟的负载已经为2.32了
Every 2.0s: uptime Wed May 8 15:45:11 2019
15:45:11 up 3:17, 4 users, load average: 2.32, 1.56, 0.83
"窗口3"
可查看到,CPU主要用于进行io处理,并且两个CPU都处于繁忙状态
[root@m01 ~]# mpstat -P ALL 5
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:41:23 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:41:28 PM all 0.11 0.00 29.42 61.56 0.11 5.21 0.00 0.00 3.58
03:41:28 PM 0 0.00 0.00 24.66 68.04 0.23 6.62 0.00 0.00 0.46
03:41:28 PM 1 0.21 0.00 33.75 55.83 0.00 3.75 0.00 0.00 6.46
03:41:28 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:41:33 PM all 0.11 0.00 24.01 67.40 0.22 4.19 0.00 0.00 4.07
03:41:33 PM 0 0.00 0.00 16.90 71.99 0.46 3.01 0.00 0.00 7.64
03:41:33 PM 1 0.00 0.00 30.67 63.45 0.00 5.25 0.00 0.00 0.63
03:41:33 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:41:38 PM all 0.00 0.00 18.46 64.71 0.33 4.23 0.00 0.00 12.27
03:41:38 PM 0 0.00 0.00 19.57 62.15 0.65 2.37 0.00 0.00 15.27
03:41:38 PM 1 0.22 0.00 17.07 67.18 0.00 6.13 0.00 0.00 9.41
03:41:38 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:41:43 PM all 0.11 0.00 22.00 61.91 0.21 5.15 0.00 0.00 10.62
03:41:43 PM 0 0.22 0.00 19.69 67.04 0.44 2.65 0.00 0.00 9.96
03:41:43 PM 1 0.00 0.00 24.32 56.96 0.00 7.69 0.00 0.00 11.02
"窗口4"
查看占用CPU较高的进程
[root@m01 ~]# pidstat -u 5 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:43:46 PM PID %usr %system %guest %CPU CPU Command
03:43:51 PM 34 0.00 2.00 0.00 2.00 0 kswapd0
03:43:51 PM 411 0.00 1.00 0.00 1.00 0 jbd2/sda3-8
03:43:51 PM 1058 0.00 6.60 0.00 6.60 1 flush-8:0
03:43:51 PM 1205 0.20 0.00 0.00 0.20 1 zabbix_agentd
03:43:51 PM 1492 0.00 0.20 0.00 0.20 1 kblockd/1
03:43:51 PM 7190 0.00 0.20 0.00 0.20 0 watch
03:43:51 PM 7799 0.00 12.00 0.00 12.00 1 stress
03:43:51 PM PID %usr %system %guest %CPU CPU Command
03:43:56 PM 7 0.00 0.20 0.00 0.20 0 events/0
03:43:56 PM 34 0.00 1.20 0.00 1.20 0 kswapd0
03:43:56 PM 411 0.00 2.40 0.00 2.40 1 jbd2/sda3-8
03:43:56 PM 1058 0.00 11.20 0.00 11.20 1 flush-8:0
03:43:56 PM 1209 0.00 0.20 0.00 0.20 1 zabbix_agentd
03:43:56 PM 7799 0.00 18.00 0.00 18.00 0 stress
Average: PID %usr %system %guest %CPU CPU Command
Average: 7 0.00 0.10 0.00 0.10 - events/0
Average: 34 0.00 1.60 0.00 1.60 - kswapd0
Average: 411 0.00 1.70 0.00 1.70 - jbd2/sda3-8
Average: 1058 0.00 8.90 0.00 8.90 - flush-8:0
Average: 1205 0.10 0.00 0.00 0.10 - zabbix_agentd
Average: 1209 0.00 0.10 0.00 0.10 - zabbix_agentd
Average: 1492 0.00 0.10 0.00 0.10 - kblockd/1
Average: 7190 0.00 0.10 0.00 0.10 - watch
Average: 7799 0.00 15.00 0.00 15.00 - stress
"查看系统IO"
主要进行磁盘写入
[root@m01 ~]# iostat 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.97 0.00 5.04 3.20 0.00 87.79
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.02 0.00 264 0
sda 35.96 63.99 32246.86 761172 383586740
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 21.29 72.51 0.00 6.20
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.00 0.00 0 0
sda 804.50 148.00 820820.00 296 1641640
avg-cpu: %user %nice %system %iowait %steal %idle
0.27 0.00 25.87 62.67 0.00 11.20
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.00 0.00 0.00 0 0
sda 773.50 0.00 787620.00 0 1575240
"4.模拟多个进程"
"窗口1"
一共开启7个进程
[root@m01 ~]# stress -c 7 --timeout 600
stress: info: [8059] dispatching hogs: 7 cpu, 0 io, 0 vm, 0 hdd
"窗口2"
负载已经高达6.93了
[root@m01 ~]# watch -d uptime
Every 2.0s: uptime Wed May 8 15:54:06 2019
15:54:06 up 3:26, 4 users, load average: 6.93, 4.63, 2.41
"窗口3"
此时所有CPU的使用率都为100%
[root@m01 ~]# mpstat -P ALL 5
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:50:16 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:50:21 PM all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:50:21 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:50:21 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:50:21 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:50:26 PM all 99.90 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00
03:50:26 PM 0 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00
03:50:26 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
"窗口4"
查看占用CPU的进程
[root@m01 ~]# pidstat -u 5 2
Linux 2.6.32-696.el6.x86_64 (m01) 05/08/2019 _x86_64_ (2 CPU)
03:51:11 PM PID %usr %system %guest %CPU CPU Command
03:51:16 PM 7190 0.20 0.00 0.00 0.20 0 watch
03:51:16 PM 8060 24.90 0.00 0.00 24.90 1 stress
03:51:16 PM 8061 33.27 0.00 0.00 33.27 0 stress
03:51:16 PM 8062 25.10 0.00 0.00 25.10 1 stress
03:51:16 PM 8063 33.07 0.00 0.00 33.07 0 stress
03:51:16 PM 8064 24.90 0.00 0.00 24.90 1 stress
03:51:16 PM 8065 33.27 0.00 0.00 33.27 0 stress
03:51:16 PM 8066 24.90 0.00 0.00 24.90 1 stress
03:51:16 PM PID %usr %system %guest %CPU CPU Command
03:51:21 PM 1205 0.00 0.20 0.00 0.20 1 zabbix_agentd
03:51:21 PM 8060 25.00 0.00 0.00 25.00 1 stress
03:51:21 PM 8061 33.20 0.00 0.00 33.20 0 stress
03:51:21 PM 8062 25.00 0.00 0.00 25.00 1 stress
03:51:21 PM 8063 33.20 0.00 0.00 33.20 0 stress
03:51:21 PM 8064 25.00 0.00 0.00 25.00 1 stress
03:51:21 PM 8065 33.20 0.00 0.00 33.20 0 stress
03:51:21 PM 8066 25.00 0.00 0.00 25.00 1 stress
Average: PID %usr %system %guest %CPU CPU Command
Average: 1205 0.00 0.10 0.00 0.10 - zabbix_agentd
Average: 7190 0.10 0.00 0.00 0.10 - watch
Average: 8060 24.95 0.00 0.00 24.95 - stress
Average: 8061 33.23 0.00 0.00 33.23 - stress
Average: 8062 25.05 0.00 0.00 25.05 - stress
Average: 8063 33.13 0.00 0.00 33.13 - stress
Average: 8064 24.95 0.00 0.00 24.95 - stress
Average: 8065 33.23 0.00 0.00 33.23 - stress
Average: 8066 24.95 0.00 0.00 24.95 - stress
"查看进程状态"
全部处于R 运行状态
[root@m01 ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 1416 ? Ss 12:27 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:27 0:00 [kthreadd]
root 8059 0.0 0.0 6524 456 pts/0 S+ 15:49 0:00 stress -c 7 --timeout 600
root 8060 27.6 0.0 6524 124 pts/0 R+ 15:49 0:53 stress -c 7 --timeout 600
root 8061 30.3 0.0 6524 124 pts/0 R+ 15:49 0:59 stress -c 7 --timeout 600
root 8062 24.9 0.0 6524 124 pts/0 R+ 15:49 0:48 stress -c 7 --timeout 600
root 8063 33.0 0.0 6524 124 pts/0 R+ 15:49 1:04 stress -c 7 --timeout 600
root 8064 24.9 0.0 6524 124 pts/0 R+ 15:49 0:48 stress -c 7 --timeout 600
root 8065 33.0 0.0 6524 124 pts/0 R+ 15:49 1:04 stress -c 7 --timeout 600
root 8066 24.9 0.0 6524 124 pts/0 R+ 15:49 0:48 stress -c 7 --timeout 600
root 8176 0.0 0.0 110256 1156 pts/1 R+ 15:52 0:00 ps -aux