案例一:IO
线上遇到一例情况,负载达到30以上了,如下是cpu使用率的情况:
[root@localhost ~]# top
top - 20:29:16 up 283 days, 9:15, 1 user, load average: 27.92, 27.72, 25.42
Tasks: 393 total, 3 running, 390 sleeping, 0 stopped, 0 zombie
%Cpu0 : 3.5 us, 5.9 sy, 0.0 ni, 61.5 id, 26.4 wa, 0.0 hi, 2.8 si, 0.0 st
%Cpu1 : 3.8 us, 3.8 sy, 0.0 ni, 36.8 id, 54.0 wa, 0.0 hi, 1.7 si, 0.0 st
%Cpu2 : 7.5 us, 8.2 sy, 0.0 ni, 10.9 id, 69.4 wa, 0.0 hi, 4.1 si, 0.0 st
%Cpu3 : 10.2 us, 8.5 sy, 0.0 ni, 7.1 id, 70.7 wa, 0.0 hi, 3.4 si, 0.0 st
%Cpu4 : 9.5 us, 9.8 sy, 0.0 ni, 34.0 id, 42.5 wa, 0.0 hi, 4.2 si, 0.0 st
%Cpu5 : 4.8 us, 4.8 sy, 0.0 ni, 3.4 id, 84.5 wa, 0.0 hi, 2.4 si, 0.0 st
%Cpu6 : 7.7 us, 5.2 sy, 0.0 ni, 38.3 id, 45.3 wa, 0.0 hi, 3.5 si, 0.0 st
%Cpu7 : 7.2 us, 7.6 sy, 0.0 ni, 0.0 id, 79.7 wa, 0.0 hi, 5.5 si, 0.0 st
%Cpu8 : 6.2 us, 6.2 sy, 0.0 ni, 30.5 id, 52.1 wa, 0.0 hi, 5.1 si, 0.0 st
%Cpu9 : 2.7 us, 2.4 sy, 0.0 ni, 33.9 id, 59.6 wa, 0.0 hi, 1.4 si, 0.0 st
%Cpu10 : 10.1 us, 12.5 sy, 0.0 ni, 24.0 id, 43.9 wa, 0.0 hi, 9.4 si, 0.0 st
%Cpu11 : 4.1 us, 4.5 sy, 0.0 ni, 29.3 id, 59.3 wa, 0.0 hi, 2.8 si, 0.0 st
%Cpu12 : 0.3 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu13 : 0.0 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu14 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu15 : 0.3 us, 1.4 sy, 0.0 ni, 27.2 id, 70.7 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu16 : 1.4 us, 7.3 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 3.1 si, 0.0 st
%Cpu17 : 1.0 us, 5.2 sy, 0.0 ni, 91.3 id, 0.0 wa, 0.0 hi, 2.4 si, 0.0 st
%Cpu18 : 1.4 us, 6.9 sy, 0.0 ni, 87.9 id, 0.0 wa, 0.0 hi, 3.8 si, 0.0 st
%Cpu19 : 1.1 us, 4.9 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 2.8 si, 0.0 st
%Cpu20 : 2.1 us, 9.6 sy, 0.0 ni, 82.3 id, 0.0 wa, 0.0 hi, 6.0 si, 0.0 st
%Cpu21 : 1.0 us, 4.7 sy, 0.0 ni, 92.2 id, 0.0 wa, 0.0 hi, 2.0 si, 0.0 st
%Cpu22 : 1.4 us, 7.8 sy, 0.0 ni, 86.9 id, 0.0 wa, 0.0 hi, 3.9 si, 0.0 st
%Cpu23 : 1.0 us, 5.9 sy, 0.0 ni, 80.3 id, 10.4 wa, 0.0 hi, 2.4 si, 0.0 st
KiB Mem : 98855616 total, 5539312 free, 19304672 used, 74011632 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 63798724 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12947 haproxy 20 0 149656 44404 284 S 84.1 0.0 3769:51 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12139 12140 12142 12143 12144 12145 12147 12149 12151
12945 haproxy 20 0 150120 44860 376 S 40.1 0.0 4001:59 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12139 12140 12142 12143 12144 12145 12147 12149 12151
12939 haproxy 20 0 157368 43968 356 S 33.4 0.0 3821:32 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12139 12140 12142 12143 12144 12145 12147 12149 12151
1342 squid 20 0 5945884 1.193g 7020 R 29.8 1.3 92:44.67 (squid)
1336 squid 20 0 4849604 1.202g 7016 S 23.5 1.3 114:22.80 (squid)
1335 squid 20 0 5826144 1.200g 7020 R 20.5 1.3 120:22.30 (squid)
1334 squid 20 0 5917652 1.206g 7060 D 17.5 1.3 82:17.62 (squid)
1339 squid 20 0 5977892 1.219g 7048 S 17.5 1.3 92:43.62 (squid)
1338 squid 20 0 5604208 1.244g 7036 S 14.6 1.3 111:53.10 (squid)
26296 squid 20 0 5898816 1.129g 7036 S 14.6 1.2 74:10.82 (squid)
1337 squid 20 0 5944108 1.346g 7036 S 11.6 1.4 79:00.58 (squid)
1343 squid 20 0 5914844 1.491g 7008 S 10.6 1.6 85:30.38 (squid)可以看到cpu使用率大部分是消耗在iowait上面了。
在vmstat的输出中,可以看到,内存还有6G多,说明内存是足够的,但是第二列b,可以看到明显大于CPU的数量(24核),说明cpu一直消耗在IO等待上面了。
从上面分析出可以看出,磁盘IO是系统的短板,需要着手优化磁盘。但从iostat的输出可以看出,使用率100%的磁盘是一直在发生变化 的,给性化带来难度。
那要怎么办呢?一般这些一直在发生变化,可以说明应用程序可能不会出现问题,那只能从硬件方面来着手优化了。
从硬件上面来看,优先是选择做raid,以及使用ssd盘,但这台服务器是服务大文件的机器,使用ssd是不太现实的,同时raid是已经做好的,不可能修改。所以只能从raid卡着手。
raid卡的最常见的优化方法是使用raid卡的缓存,先来看下有没有开启写缓存:
可以看到,100%是读缓存,需要将其优化到60%读缓存/40%写缓存,使用脚本优化如下:
优化完成之后,可以看到负载有明显下降。
Last updated
Was this helpful?