Linux IO

2019/08/28 Linux

I/O相关的应用通常用来处理大量数据,需要大量内存和存储,频繁I/O操作读、写数据


前言

IO 是运维过程中比较关注的点。阅读Linux性能监测:IO篇

实操

说到实际的,那就要说说实际运维工作中,如何发现IO性能瓶颈

iostat。通过这个神器,就可以监视具体的磁盘性能了。

iostat -x 1 20 每一秒显示一次详细信息,共显示20次。 -x 显示详细信息 / -d 显示磁盘使用情况

[user1@Test_Server ~]$ iostat -x
Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    01/05/2019      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.83    0.00    0.31    0.09    0.00   97.77

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.03     0.78    0.24    1.38    12.64    20.67    41.01     0.02   10.98   55.50    3.17   0.71   0.12

具体解释详细请阅读Linux iostat命令详解

关注性能监控指标

  • %iowait: 如果该值较高,表示磁盘存在I/O瓶颈
  • await: 一般地,系统I/O响应时间应该低于5ms,如果大于10ms就比较大了。另一方面如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
  • %util: 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
  • avgqu-sz: 如果avgqu-sz比较大,也表示有当量io在等待。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。

但是,在实际运维工作中,都希望找到是哪个进程消耗了IO,所以终极目的是找到这个进程ID。可是通过 iostat 都没法达到目的。 所以,神器pidstat命令就登场了,通过这个命令,就可以知道是谁在后台偷用IO了。

pidstat 是 sysstat 工具的一个命令,如果服务器上没有现成的,不要着急。CentOS 使用yum install sysstat 安装

使用 -d 选项,可以查看进程IO的统计信息

[root@massive-dataset-new-002 ~]# pidstat -d 1
Linux 2.6.32-431.el6.x86_64 (massive-dataset-new-002)   08/28/2019      _x86_64_        (8 CPU)

03:28:50 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
03:28:51 PM       438      0.00      3.96      0.00  jbd2/dm-1-8
03:28:51 PM     21406      0.00    126.73      0.00  mysqld

03:28:51 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
03:28:52 PM       438      0.00      4.00      0.00  jbd2/dm-1-8
03:28:52 PM       969      0.00      4.00      0.00  flush-253:1
03:28:52 PM     14200      0.00      4.00      0.00  java
03:28:52 PM     21406      0.00      8.00      0.00  mysqld
03:28:52 PM     24608      0.00      8.00      0.00  java
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)
Command: 拉起进程对应的命令

具体解释详细请阅读Linux pidstat命令详解

现在定位到进程级别了,很多时候,需要知道这个进程到底打开了哪些文件,这个进程到底和哪些进程关联,这个时候就不得不提到lsof命令了。

lsof -p 20711 列出指定进程打开的文件列表

具体解释详细请阅读Linux lsof命令详解

总结

排查问题所使用的工具大而全的知识一时半会记不全。要多练习多思考

Search

    Table of Contents