# Linux-排查磁盘IO读写很高



### 背景-线上告警

线上一台服务器告警，磁盘利用率 disk.util > 90，并持续告警。

登录该服务器后通过 iostat -x 1 10 查看了相关磁盘使用信息。相关截图如下：

<figure><img src="https://2134947750-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvILwbD2PrkBCkSitM3m4%2Fuploads%2FLBL6dv35oJ7HI1HLvj6p%2Fimage.png?alt=media&#x26;token=6f02d851-39c5-4a7e-8f66-2499b0e557c8" alt=""><figcaption></figcaption></figure>

```bash
# 如果没有 iostat 命令，那么使用 yum install sysstat 进行安装
iostat -x 1 10
```

由上图可知，vdb磁盘的 %util【IO】几乎都在100%，原因是频繁的读取数据造成的。

### 其他字段说明

* Device：设备名称
* tps：每秒的IO读、写请求数量，多个逻辑请求可以组合成对设备的单个I/O请求。
* Blk\_read/s (kB\_read/s, MB\_read/s)：从设备读取的数据量，以每秒若干块(千字节、兆字节)表示。块相当于扇区，因此块大小为512字节。
* Blk\_wrtn/s (kB\_wrtn/s, MB\_wrtn/s)：写入设备的数据量，以每秒若干块(千字节、兆字节)表示。块相当于扇区，因此块大小为512字节。
* Blk\_read (kB\_read, MB\_read)：读取块的总数(千字节、兆字节)。
* Blk\_wrtn (kB\_wrtn, MB\_wrtn)：写入块的总数(千字节，兆字节)。
*
* rrqm/s：每秒合并到设备的读请求数。即delta(rmerge)/s
* wrqm/s：每秒合并到设备的写入请求数。即delta(wmerge)/s
* r/s：每秒完成的读I/O设备次数。即delta(rio)/s
* w/s：每秒完成的写I/0设备次数。即delta(wio)/s
* rsec/s (rkB/s, rMB/s)：每秒读取设备的扇区数(千字节、兆字节)。每扇区大小为512字节
* wsec/s (wkB/s, wMB/s)：每秒写入设备的扇区数(千字节、兆字节)。每扇区大小为512字节
*
* avgrq-sz：平均每次设备I/O操作的数据量(扇区为单位)。即delta(rsec+wsec)/delta(rio+wio)
* avgqu-sz：平均每次发送给设备的I/O队列长度。
* await：平均每次IO请求等待时间。(包括等待队列时间和处理时间，毫秒为单位)
* r\_await：平均每次IO读请求等待时间。(包括等待队列时间和处理时间，毫秒为单位)
* w\_await：平均每次IO写请求等待时间。(包括等待队列时间和处理时间，毫秒为单位)
* svctm：平均每次设备I/O操作的处理时间(毫秒)。警告！不要再相信这个字段值，这个字段将在将来的sysstat版本中删除。
* %util：一秒中有百分之多少的时间用于I/O操作，或者说一秒中有多少时间I/O队列是非空的。当该值接近100%时，设备饱和发生。

### 找到 IO 占用高的进程

```bash
# 通过 iotop 命令,如果没有该命令，请通过 yum install iotop 进行安装。
iotop -oP
```

<figure><img src="https://2134947750-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvILwbD2PrkBCkSitM3m4%2Fuploads%2FTMG4bDYhWMTDEFzQ8ieu%2Fimage.png?alt=media&#x26;token=4768ce52-6da2-4a80-8bfd-1bf189b31c32" alt=""><figcaption></figcaption></figure>

通过这个命令可以看见比较详细信息，如：进程号，磁盘读取量，磁盘写入量，IO百分比，涉及到的命令是什么「两个都是 grep 命令造成的IO读取量大」。



**或者**

```bash
# 通过 pidstat 命令, 命令的含义：展示I/O统计，每秒更新一次
pidstat -d 1
```

<figure><img src="https://2134947750-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvILwbD2PrkBCkSitM3m4%2Fuploads%2F2jcBqSbSC6X70ZExLBMn%2Fimage.png?alt=media&#x26;token=1357cd07-28b6-42f3-a7b4-1aa9ba9242f3" alt=""><figcaption></figcaption></figure>

可见其中 grep 命令占用了大量的读IO，之后可根据 PID 查看相关进程信息。

```
```
