案例一: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?