加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

LINUX学习:CentOS 7.2中磁盘iowait过高解决

发布时间:2020-12-13 17:44:22 所属栏目:Linux 来源:网络整理
导读:《LINUX学习:CentOS 7.2中磁盘iowait过高解决》要点: 本文介绍了LINUX学习:CentOS 7.2中磁盘iowait过高解决,希望对您有用。如果有疑问,可以联系我们。 (一)简述 每天都收到磁盘iowait告警信息,尤其是日志服务器在进行大量的读写操作过程中,从而造成系统

《LINUX学习:CentOS 7.2中磁盘iowait过高解决》要点:
本文介绍了LINUX学习: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的结果便是我们要查找的文件

本文永远更新链接地址

欢迎参与《LINUX学习:CentOS 7.2中磁盘iowait过高解决》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读