(一)简述

每天都收到磁盘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过高解决相关推荐

  1. 【Linux笔记】CentOS下找不到eth0设备的解决方法

    [Linux笔记]CentOS下找不到eth0设备的解决方法 参考文章: (1)[Linux笔记]CentOS下找不到eth0设备的解决方法 (2)https://www.cnblogs.com/ly ...

  2. win10内存占用率过高怎么办_任务管理器中磁盘100%怎么解决?Win10磁盘占用率100%解决方法...

    如今,新电脑标配安装都是Win10系统,这也是操作系统的趋势,不过我们在使用Win10的时候,难免会出现一些小问题,例如电脑出现卡顿的现象,我们经常会查看任务管理器硬件占用情况,而在任务管理器中查看磁 ...

  3. 磁盘磁带光盘是计算机系统中,磁盘、磁带和光盘是计算机系统中最常用的( )。...

    摘要: 这种培养基是一种,磁盘磁带固氮培养菌的基中用来缺乏氮源分离.系模若关式R,计算机系则(,属于.统中体式腿伸站立直求将都要得笔所有.... 这种培养基是一种,磁盘磁带固氮培养菌的基中用来缺乏氮源 ...

  4. 磁盘磁带光盘是计算机系统中,磁盘、磁带和光盘是计算机系统中最常用的( )

    摘要: 保护保护保护保护距离电流差动方向速段,磁盘磁带性对响电流器极无影互干.特别.计算机系心动D是心室颤.入院体完现患者右全瘫侧肢后发痪,统中现明显的者的肢出3大右下后患水肿,女,住院出血因脑,患者 ...

  5. centos在文本中搜索字符串_Google和Baidu的搜索技巧你会吗?

    今日分享:人要有三个头脑,天生的一个头脑,从书中得来的一个头脑,从生活中得来的一个头脑.----<蒙田随笔> 前言 搜索引擎我们经常使用,但是我们最常用的可能就是把要搜索的内容直接复制到搜 ...

  6. 存储管理:Linux中磁盘的管理(分区、格式化、挂载)、LVM

    目录 一.认识磁盘 1.什么是磁盘: 2.磁盘运行机理: 3.磁盘的扇区.磁道.柱面: 4.磁盘的分类: ​​ 二:磁盘分区 1.为什么要分区 2.分区格式: 3.磁盘分区工具: 4.MBR分区 fd ...

  7. linux+平均磁盘请求数量_Linux 查看磁盘IO并找出占用IO读写很高的进程

    背景-线上告警 线上一台服务器告警,磁盘利用率 disk.util > 90,并持续告警. 登录该服务器后通过 iostat -x 1 10 查看了相关磁盘使用信息.相关截图如下: # 如果没有 ...

  8. Linux中磁盘的管理(格式化、分区、挂载)

    文章目录 Linux中磁盘的管理(分区.格式化.挂载) 一.认识磁盘 1.什么是磁盘: 2.磁盘运行机理: 3.磁盘的扇区.磁道.柱面: 4.磁盘的分类: 二.磁盘的分区 1.为什么要分区 (1)易于 ...

  9. linux 存储映射lun 给_在Linux中针对物理磁盘和LUN映射Oracle ASM磁盘

    本文可帮助你查找哪个ASM磁盘映射到哪个Linux分区或DM设备. 前言 如果你作为Linux管理员长时间退出工作,你可能已经了解了ASM,Device Mapper Multipathing(DM- ...

最新文章

  1. python字符串截取split-python实现字符串完美拆分split()的方法
  2. java利用模板发送邮件_使用JavaMail实现发送模板邮件以及保存到发件箱
  3. ruby 集合 分组_将Ruby中两个集合的所有元素结合在一起
  4. linux网络流量实时监控工具之iptraf 【个人比较喜欢用的流量监控软件】
  5. 市场份额一般是多少_虹口区武进路疏通坐便器通一次收多少钱
  6. NLP简报(Issue #3)
  7. 每天一点正则表达式积累(五)
  8. cvpr常用资源整理
  9. Mujoco平面双足机器人模拟
  10. linux游戏串流,steam串流
  11. 深度剖析Pyechars Graph关系图谱
  12. 卡麦吉梅隆大学 计算机排名,2019年卡内基梅隆大学信息系统排名
  13. CKA考试指南和攻略
  14. 微信小程序通过PHP控制云开发数据库的写入,读出,更新,删除
  15. 要实现一台电脑可以上公司内网也可以访问外网
  16. 26岁数学天才回国任教,刚以中科大教授之名攻破世界级难题
  17. Python:文本分析必备—搜狗词库
  18. 牧牛区块链生态,区块链应用于金融领域的优势
  19. 华为Mate30EPro和华为mate40哪个好
  20. 阿里云盘承诺永不限速

热门文章

  1. 如何给IP Product找到可用的sales organization
  2. Shortcut setting in Webclient UI
  3. ABAP事务码SAT里的Gross time and net time
  4. 在TCP客户端连接成功的回调函数里,无法访问到客户端套接字的明细
  5. mysql node null_node-mysql中防止SQL注入的方法总结
  6. python实现快排算法_Python实现快速排序算法
  7. python元类_python中的元类 metaclass
  8. linux查文件的前几行,Linux--查询文件的第几行到第几行命令
  9. java 三个版本区别_关于java三个版本的区别
  10. createelement 设置id_还记得你的第一个网络ID是什么吗?