如何监控Linux服务器中磁盘I/O性能
你知道,在Linux服务器上用什么工具来排查或监控实时磁盘I/O性能问题吗?
在一般情况下,当一个应用程序的性能缓慢,top命令将被用来查看系统性能。
如果你没有发现任何资源利用方面的性能问题,尤其是CPU和内存,那么就会选择其他字段来确定瓶颈。
我建议检查命令输出中的wa字段,找出存储设备和分区(如硬盘、SSD和磁盘分区)是否有高I/O读写操作。
无论系统的CPU和内存使用情况如何,服务器的性能都可能因为存储设备和分区的高磁盘读写I/O操作而下降。
如果磁盘I/O操作很高或波动较大,则可能是导致性能滞后的原因之一,因此必须验证系统上的磁盘I/O统计。
为了详细推导和验证I/O统计,将主要使用iotop和iostat命令。
这些命令被广泛用于识别存储设备的性能问题,包括本地磁盘或网络文件系统。
一、什么是iotop?
iotop类似于top命令工具,用于显示实时磁盘活动。
iotop观察来自Linux内核的I/O使用信息,并显示当前系统中通过进程或线程的I/O使用情况表。
它显示从每个进程/线程读取和写入的I/O带宽。它还显示线程/进程在交换或等待I/O时花费的时间百分比。
DISK READ(磁盘读取)和DISK WRITE(磁盘写入)值一方面代表进程和内核线程之间,另一方面代表内核块设备子系统之间的总读写带宽。
实际DISK READ和实际DISK WRITE值代表了内核块设备子系统和底层硬件(HDD、SSD等)之间实际磁盘I/O的相应带宽。
1、在Linux中安装iotop
我们可以在软件包管理器的帮助下轻松安装它,因为该软件包在所有Linux发行版存储库中都可用。
对于Fedora和RHEL / CentOS 8系统,请使用DNF命令安装iotop。
$ sudo dnf install iotop
对于Debian / Ubuntu系统,请使用APT-GET命令或APT命令安装iotop。
$ sudo apt install iotop
对于基于Arch Linux的系统,请使用Pacman命令安装iotop。
$ sudo pacman -S iotop
对于RHEL / CentOS 6/7系统,请使用YUM命令安装iotop。
$ sudo yum install iotop
对于openSUSE Leap系统,请使用Zypper命令安装iotop。
$ sudo zypper install iotop
2、使用iotop命令监视磁盘I / O活动
iotop命令中有许多选项可用于检查有关磁盘I / O的各种统计信息。
运行不带任何参数的iotop命令,以查看有关当前I / O使用情况的每个进程或线程。
#iotop

要检查哪些进程实际利用了磁盘IO,运行带有-o或-only选项的iotop命令,以实现可视化。
# iotop --only

IO:它显示每个进程的输入/输出利用率,包括磁盘和交换。
SWAPIN:它只显示每个进程的交换使用情况。
二、什么是iostat?
iostat用于报告中央处理器(CPU)统计数据和设备及分区的输入/输出统计数据。
iostat命令用于通过观察设备的活动时间与其平均传输速率的关系来监控系统输入/输出设备的负载。
iostat命令生成的报告可用于更改系统配置,以更好地平衡物理磁盘之间的输入/输出负载。
iostat命令每次运行时都会报告所有的统计数据。在多处理器系统中,CPU统计数据是以所有处理器的平均值来计算全系统的。
iostat命令会生成两种类型的报告。
CPU使用情况报告
设备利用率报告。
1、如何在Linux中安装iostat?
iostat工具是sysstat包的一部分,可以从官方的Linux发行库中安装。
在Fedora和CentOS/RHEL 8上
$ sudo dnf install sysstat
在 Debian/Ubuntu 上
$ sudo apt install sysstat
在Arch Linux上
$ sudo pacman -S sysstat
在RHEL/CentOS 6/7上
$ sudo yum install sysstat
在openSUSE上
$ sudo zypper install sysstat
2、使用sysstat命令测量磁盘I/O性能
在iostat命令中,有许多选项可用于检查有关磁盘I/O和CPU的各种统计数据。
运行iostat命令时,不需要任何参数就可以看到系统的完整统计信息。

运行带有-d选项的iostat命令,可以查看所有设备的I/O统计数据。

运行带有-p选项的iostat命令,可以查看所有设备及其分区的I/O统计数据。

运行带有-x选项的iostat命令,可以查看所有设备的详细I/O统计数据。

运行带有-d [Device_Name]选项的iostat命令,可以查看特定设备及其分区的I/O统计数据。

运行带有-m选项的iostat命令,可以看到所有设备的I/O统计数据,以MB而不是KB为单位。
默认情况下,它以KB为单位显示输出。

在一定的时间间隔内运行 iostat 命令,使用以下格式。在这个例子中,每隔5秒就会有两个报告。

运行带有-N选项的iostat命令,可以查看LVM磁盘I/O统计报告。

运行nfsiostat命令,查看网络文件系统(NFS)的I/O统计数据。
# nfsiostat
本文除了介绍常规的top命令使用方法外,还简要介绍了使用iostat和iotop命令进行磁盘性能故障诊断。