源自极客时间的教程:
1、使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味
着磁盘 I/O 存在性能瓶颈。
2、饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶
颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
3、IOPS(Input/Output Per Second),是指每秒的 I/O 请求数。
4、吞吐量,是指每秒的 I/O 请求大小。
5、响应时间,是指 I/O 请求从发出到收到响应的间隔时间。
一 IOSTAT分析:
%util ,就是我们前面提到的磁盘 I/O 使用率;
r/s+ w/s ,就是 IOPS;
rkB/s+wkB/s ,就是吞吐量;
r_await+w_await ,就是响应时间。
上面提到的 iostat 只提供磁盘整体的 I/O 性能数据,缺点在于,并不能知道具体是哪些进
程在进行磁盘读写。要观察进程的 I/O 情况,你还可以使用 pidstat 和 iotop 这两个工
具。
pidstat 是我们的老朋友了,这里我就不再啰嗦它的功能了。给它加上 -d 参数,你就可以
看到进程的 I/O 情况,如下所示:
从 pidstat 的输出你能看到,它可以实时查看每个进程的 I/O 情况,包括下面这些内容。
除了可以用 pidstat 实时查看,根据 I/O 大小对进程排序,也是性能分析中一个常用的方
法。这一点,我推荐另一个工具, iotop。它是一个类似于 top 的工具,你可以按照 I/O
大小对进程排序,然后找到 I/O 较大的那些进程。
iotop 的输出如下所示:
$ pidstat -d 1
13:39:51 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
13:39:52 102 916 0.00 4.00 0.00 0 rsyslogd
用户 ID(UID)和进程 ID(PID) 。
每秒读取的数据大小(kB_rd/s) ,单位是 KB。
每秒发出的写请求数据大小(kB_wr/s) ,单位是 KB。
每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。
块 I/O 延迟(iodelay),包括等待同步块 I/O 和换入块 I/O 结束的时间,单位是时钟
周期。
除了可以用 pidstat 实时查看,根据 I/O 大小对进程排序,也是性能分析中一个常用的方
法。这一点,我推荐另一个工具, iotop。它是一个类似于 top 的工具,你可以按照 I/O
大小对进程排序,然后找到 I/O 较大的那些进程。
$ iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 7.85 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
15055 be/3 root 0.00 B/s 7.85 K/s 0.00 % 0.00 % systemd-journald
从这个输出,你可以看到,前两行分别表示,进程的磁盘读写大小总数和磁盘真实的读写
大小总数。因为缓存、缓冲区、I/O 合并等因素的影响,它们可能并不相等。
剩下的部分,则是从各个角度来分别表示进程的 I/O 情况,包括线程 ID、I/O 优先级、每
秒读磁盘的大小、每秒写磁盘的大小、换入和等待 I/O 的时钟百分比等。