iostat 是一个用于监控系统输入/输出设备(如磁盘)负载的工具。它属于 sysstat 软件包的一部分,可以显示CPU使用情况以及设备和分区的详细统计信息。通过 iostat,我们可以了解磁盘的读写速度、使用率等关键指标,从而评估磁盘的性能瓶颈。
在Linux系统中,磁盘I/O性能是影响系统整体性能的重要因素之一。如果磁盘I/O成为瓶颈,可能会导致应用程序响应变慢甚至崩溃。因此,使用 iostat 工具来定期监控磁盘I/O性能是非常必要的。
sudo apt-get update
sudo apt-get install sysstat
sudo yum install sysstat
安装完成后,可以通过以下命令查看帮助信息:
iostat --help
以下是 iostat 的一些常用参数及其含义:
-x:显示扩展统计信息。-d:仅显示设备(磁盘)的使用情况。-t:显示时间戳。-c:仅显示CPU使用情况。-m:以MB为单位显示数据传输速率。-p [device]:显示指定设备或分区的统计信息。interval:指定两次报告之间的时间间隔(秒)。count:指定报告的次数。例如,以下命令将每隔2秒生成一次报告,总共生成5次:
iostat -dx 2 5
执行 iostat -dx 命令后,输出的字段解释如下:
| 字段 | 含义 |
|---|---|
| Device | 设备名称 |
| tps | 每秒传输的事务数(即每秒的I/O请求数) |
| kB_read/s | 每秒从设备读取的数据量(KB) |
| kB_wrtn/s | 每秒写入设备的数据量(KB) |
| kB_read | 累计从设备读取的数据量(KB) |
| kB_wrtn | 累计写入设备的数据量(KB) |
| rrqm/s | 每秒合并的读请求数量 |
| wrqm/s | 每秒合并的写请求数量 |
| r/s | 每秒完成的读I/O请求数 |
| w/s | 每秒完成的写I/O请求数 |
| rkB/s | 每秒读取的数据量(KB) |
| wkB/s | 每秒写入的数据量(KB) |
| avgrq-sz | 平均每次I/O操作的数据量大小(扇区数) |
| avgqu-sz | 平均I/O队列长度 |
| await | 平均每次I/O操作的等待时间(毫秒) |
| r_await | 平均每次读I/O操作的等待时间(毫秒) |
| w_await | 平均每次写I/O操作的等待时间(毫秒) |
| svctm | 平均每次I/O操作的服务时间(毫秒) |
| %util | 设备利用率(即设备忙于处理I/O请求的时间百分比) |
执行以下命令查看当前磁盘的I/O性能:
iostat -dx 1 5
该命令会每隔1秒生成一次报告,总共生成5次。重点关注 %util 和 await 字段:
%util 接近100%,说明磁盘已经接近满负荷运行。await 值较高(通常超过10ms),说明磁盘I/O可能存在延迟问题。如果只想查看某个特定设备(如 /dev/sda)的I/O性能,可以使用以下命令:
iostat -dx /dev/sda 2 5
这将针对 /dev/sda 设备生成5次报告,每次间隔2秒。
有时需要同时查看CPU和磁盘的使用情况,可以执行以下命令:
iostat -cdx 2 5
此命令会同时显示CPU和磁盘的统计信息。
根据 iostat 的输出结果,可以采取以下措施优化磁盘I/O性能:
%util 接近100%,考虑升级硬件或添加更多的磁盘以分担负载。await 值过高,可能需要检查是否有过多的随机I/O操作,尝试优化应用程序的I/O模式。