Linux 中是否有命令(更具体地说是 CentOS 5)可以显示过去几秒钟内每个文件读取了多少字节/秒。Windows 7 中的类似工具是资源监视器,它可以显示每个文件的读取速度,并且有助于诊断系统性能下降。
答案1
我最喜欢的是iotop。它将按进程显示 I/O 计数。
其他可用于调查 I/O 占用大的命令:
- 虚拟机状态:wa 列中的高计数是机器压力过大的标志
- iostat:报告设备、分区和 NFS 的 CPU 统计信息和输入/输出统计信息
从 vmstat 开始;如果 I/O 等待(wa 列)中的进程少于 2 个,则机器没有 I/O 匮乏,并且您的性能问题很可能与 I/O 无关。查看交换输入/输出,那里的数字很高表明您的系统内存匮乏。
如果您的系统确实 I/O 不足,iostat 可以提示您哪个设备、分区或网络文件系统受到压力。有时这足以猜出罪魁祸首。
vmstat 的示例输出:
operator@server:~$ sudo vmstat 10 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 408892 294200 4310552 0 0 0 6 3 2 1 2 97 0
0 0 0 409372 294200 4310552 0 0 0 54 2192 4880 1 3 97 0
0 0 0 409124 294200 4310496 0 0 0 18 2200 4895 0 3 96 0
0 0 0 409000 294200 4310496 0 0 0 26 2182 4884 0 2 97 0
0 0 0 409620 294200 4310496 0 0 0 18 2195 5120 0 2 97 0
iotop 的示例输出:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
27327 be/4 www-data 0.00 B/s 3.67 K/s 0.00 % 0.00 % apache2 -k start
29714 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: stats collector process
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
...