2021-05-12 14:32:11
CentOS 7.2中磁碟iowait過高解決
(一)簡述
每天都收到磁碟iowait告警資訊,尤其是紀錄檔伺服器在進行大量的讀寫操作過程中,從而造成系統處於崩潰邊緣,為查詢磁碟iowait由於什麼原因造成的以及後續的系統的優化點。CentOS有許多查詢問題的工具,也有高階的。
I/O Wait 就是一個需要使用高階的工具來debug的問題,當然也有許多基本工具的高階用法。I/O wait的問題難以定位的原因 是因為我們有很多工具可以告訴你說I/O 受限了,但是並沒有告訴你具體是哪些進程們引起的。
具體的思路如下:top 。檢視由cpu一行浪費在iowait上的cpu百分比 =>iostat -x 2 5 檢視某塊磁碟正在被寫入 => iotop 查詢最高的磁碟I/O對應的進程 => lsof -p pid 檢視通過一個進程開啟所有檔案或開啟一個檔案的所有進程。
(二)具體步驟如下:
(1)通過top命令來確認是否是I/O導致系統緩慢。
[root@iZ23iod5vslZ ~]# top
top - 15:38:32 up 40 days, 5:59, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.4 us, 0.2 sy, 0.0 ni, 99.2 id, 98 wa, 0.0 hi, 0.0 si, 0.1 st
KiB Mem: 32520424 total, 31492136 used, 1028288 free, 412772 buffers
KiB Swap: 0 total, 0 used, 0 free. 25902892 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18988 root 20 0 11.647g 3.611g 7896 S 2.7 11.6 507:57.30 java
28 root 20 0 0 0 0 S 0.3 0.0 6:43.31 rcuos/3
1 root 20 0 49556 3412 1912 S 0.0 0.0 0:14.60 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:48.28 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.83 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/5
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/6
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/7
從Cpu一行我們可以看到浪費在I/O Wait上的CPU百分比;這個數位越高說明越多的CPU資源在等待I/O許可權.具體的解釋如下:
0.4% us 使用者空間佔用CPU的百分比。
0.2% sy 核心空間佔用CPU的百分比。
0.0% ni 改變過優先順序的進程佔用CPU的百分比
2% id 空閒CPU百分比
98% wa IO等待佔用CPU的百分比
0.0% hi 硬中斷(Hardware IRQ)佔用CPU的百分比
0.0% si 軟中斷(Software Interrupts)佔用CPU的百分比
在這裡CPU的使用比率和windows概念不同,如果你不理解使用者空間和核心空間,需要充充電了
(2)通過iostat -x 3 3 檢視那塊磁碟正在被寫入。
[root@iZ23iod5vslZ ~]# iostat -x 3 3
Linux 3.10.0-123.9.3.el7.x86_64 (iZ23iod5vslZ) 08/14/2017 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.70 0.00 0.16 0.75 0.05 98.34
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 21.18 0.32 18.33 9.94 195.06 21.98 0.08 4.11 11.44 3.98 1.54 2.88
xvdb 0.00 15.21 1.23 1.98 38.41 68.76 66.70 0.08 25.48 3.59 39.10 1.09 0.35
xvdc 0.00 0.07 0.00 0.91 0.00 36.25 79.43 0.10 106.88 12.53 106.92 1.33 0.12
avg-cpu: %user %nice %system %iowait %steal %idle
0.75 0.00 0.17 0.08 0.08 98.91
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 2.33 0.00 0.67 0.00 12.00 36.00 0.00 5.50 0.00 5.50 5.50 0.37
xvdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
xvdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.75 0.00 0.17 0.00 0.00 99.08
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 3.33 0.00 1.67 0.00 34.67 41.60 0.01 3.00 0.00 3.00 1.60 100.27
xvdb 0.00 9.00 0.00 1.67 0.00 42.67 51.20 0.01 5.40 0.00 5.40 1.80 0.30
xvdc 0.00 0.33 0.00 0.67 0.00 4.00 12.00 0.00 2.00 0.00 2.00 2.00 0.13
每隔三秒更新一次,一共列印了三次。 -x時列印出擴充套件選項。第一次列印的資訊可以被忽略,剩下的報告,都是基於上一次間隔的時間列印出來。
上述的列子中xvda的 %util(利用率)是100.27%,有進程往磁碟中寫入資料。
(3)通過iotop查詢高I/O對應的進程
[root@iZ23iod5vslZ ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 15.67 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
18793 be/4 root 0.00 B/s 3.92 K/s 0.00 % 0.00 % java -Djava.util.logging.config.file=/usr/to~p org.apache.catalina.startup.Bootstrap start
18987 be/4 root 0.00 B/s 3.92 K/s 0.00 % 0.00 % cronolog /guojinbao/tomcat/logs/catalina.%Y-%m-%d.out
18796 be/4 root 0.00 B/s 3.92 K/s 0.00 % 0.00 % java -Djava.util.logging.config.file=/usr/to~p org.apache.catalina.startup.Bootstrap start
13193 be/4 root 0.00 B/s 3.92 K/s 0.00 % 0.00 % java -Djava.util.logging.config.file=/usr/to~p org.apache.catalina.startup.Bootstrap start
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
16388 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDun
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
16390 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDun
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/0]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/1]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/2]
從上述的例子中可以看出進程號為cronolog18987占用了大量的磁碟IO
(4)通過lsof -p pid查詢由那個檔案引起的IOwait
[root@iZ23iod5vslZ ~]# lsof -p 18987
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cronolog 18987 root cwd DIR 202,17 20480 2400258 /guojinbao/tomcat/logs
cronolog 18987 root rtd DIR 202,1 4096 2 /
cronolog 18987 root txt REG 202,1 48627 152798 /usr/local/sbin/cronolog
cronolog 18987 root mem REG 202,1 2107600 132826 /usr/lib64/libc-2.17.so
cronolog 18987 root mem REG 202,1 160240 132819 /usr/lib64/ld-2.17.so
cronolog 18987 root 0r FIFO 0,8 0t0 42614018 pipe
cronolog 18987 root 1w CHR 1,3 0t0 1028 /dev/null
cronolog 18987 root 2u CHR 136,0 0t0 3 /dev/pts/0 (deleted)
cronolog 18987 root 3w REG 202,17 5704875979 2400280 /guojinbao/tomcat/logs/catalina.2017-08-14.out
lsof 命令可以展示一個進程開啟的所有檔案,或者開啟一個檔案的所有進程。從這個列表中,我們可以找到具體是什麼檔案被寫入,根據檔案的大小和/proc中io檔案的具體資料.
為了確認我們的懷疑,我們可以使用 /proc檔案系統,每個進程目錄下都有一個叫io的檔案,裡邊儲存這和iotop類似的資訊
[root@iZ23iod5vslZ ~]# cat /proc/18987/io
rchar: 58891582418
wchar: 58891579778
syscr: 46556085
syscw: 46556077
read_bytes: 212992
write_bytes: 59580235776
cancelled_write_bytes: 0
read_bytes和write_bytes是這個進程從磁碟讀寫的位元組數。這個例子中cronolog讀取了212992byte(0.2M)資料,寫入了59580235776bytes(55.4G)資料到磁碟上。
(5)通過df -h /guojinbao來檢視伺服器那塊磁碟的根目錄
[root@iZ23iod5vslZ ~]# df -h /guojinbao/
Filesystem Size Used Avail Use% Mounted on
/dev/xvdb1 45G 38G 4.7G 89% /guojinbao
最後,通過以上的資訊我們可以放心的說lsof的結果就是我們要查詢的檔案
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-08/146267.htm
相關文章