IO
基本概念
I/O表示输入(Input)/输出(Output),输入指系统接收信号或数据的操作,输出指从系统发出信号或数据的操作。对于CPU 和主存储器的组合,任何信息传入或传出 CPU/内存组合,就会被认为是 I/O。
常用I/O性能分析工具
- iostat
该命令会每秒钟显示一次IO统计信息,包括每个磁盘的读写速度、队列长度、响应时间等等。如果发现某个磁盘的队列长度过长或响应时间过高,就可能存在IO性能问题。
1# iostat -x 1

-
sar
可用于查看系统磁盘的读写性能,支持统计磁盘 I/O 吞吐量、读写次数、等待时间等指标,并可按时间周期进行性能趋势分析。
例如:显示系统所有硬盘设备在采样时间内的使用状态,每3秒统计一次,统计5次Plain Text1# sar -d 3 5
在命令的输出信息中,各字段所代表的含义如下:
- tps: 每秒向物理设备发出的传输总数。
- rKB/s: 每秒从设备读取的KB数。
- wKB/s: 每秒写入设备的KB数。
- dKB/s: 设备每秒丢弃的KB数。
- areq-sz:: 向设备发出的I/O请求的平均大小(KB)。
- aqu-sz: 向设备发出的请求的平均队列长度。
- await: 向要服务的设备发出的I/O请求的平均时间。
- %util: 向设备发出I/O请求的已用时间百分比(设备的带宽利用率)。
-
vmstat
使用 vmstat 进行系统运行状态监测,报告磁盘相关统计信息,包括 I/O 等待、块设备读写活动情况。
在命令的输出信息中,各字段所代表的含义如下:-
reads
- total:已成功完成的读取总数。
- merged:分组读取(导致一次I/O)。
- sectors:扇区读取成功。
- ms:读取花费的毫秒数。
-
writes
- total:已成功完成的写入总数。
- merged:分组写入(导致一次I/O)。
- sectors:写入成功的扇区。
- ms:写入所花费的毫秒数。
-
IO
- cur:正在进行的 I/O 数。
- sec:I/O 所花费的秒数。
-
- iotop
使用iotop工具来查看系统中各个进程的IO使用情况。iotop工具可以实时显示进程的IO使用情况,包括每个进程的读写速度、IOPS、带宽、延迟等等。常用命令如下:
1# iotop -o

该命令会按照IO使用量的大小排序并实时显示各个进程的IO使用情况。可以查看哪些进程在进行大量的读写操作,以及它们的IO使用情况是否合理。
- strace
1# strace -f -e trace=file <command>
该命令会跟踪指定命令的文件IO操作,并输出调用过程中的详细信息。可以查看哪些文件被访问、访问的方式、访问的结果等等,以帮助定位IO问题。

- perf
使用perf工具可以进行更深入的IO性能分析,包括跟踪系统调用和函数调用。例如:
1# perf record -e 'syscalls:sys_enter_*' -a -- sleep 10
2# perf report
该命令会跟踪所有系统调用的进入过程,并记录10秒钟的调用栈信息。可以使用perf report命令来分析调用栈,查看哪些函数和系统调用占用了较多的CPU时间,以及是否存在IO性能问题。

评价此篇文章
