使用iostat查看磁盘IO
rkB/s 每秒读取数据量kB
wkB/s 每秒写入数据量kB
svctm I/O请求的平均服务时间,单位毫秒
await I/O请求的平均等待时间,单位毫秒;值越小,性能越好;
util 一秒中有百分之几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘。
rkB/s、wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
svctm的值与await的值很接近,表示几乎没有I/O等待,磁盘性能好。
如果await的值远高于svctm的值,则表示I/O队列等待太长,需要优化程序或更换更快磁盘。
使用pidstat监控单个进程的IO
pidstat -d 2 -p 8989
iotop
iostat只能看到系统的I/O情况,那如何查看具体是哪个进程/线程在操作I/O呢?可以使用iotop工具监测。
iotop安装
iotop使用
输入iotop -oP,o表示只显示有IO的线程/进程,P表示只显示进程。如下,我们可以看到tomcat的进程在写日志文件。
iotop -oP
–version 查看版本
-h, --help 查看帮助
-o, --only 只显示有 IO 操作的进程或线程
-b, --batch 没有交互的模式,可以当成日志直接输出到文件记录用。
-n NUM, --iter=NUM 循环次数,在刷新了指定的次数后,程序就退出
-d SEC, --delay=SEC 刷新的频率,默认 1 秒一次
-p PID, --pid=PID 监视单个进程,默认监视所有。要监视多个,可以加多个 -p PID
-u USER, --user=USER 监视单个用户,默认监视所有。
-P, --processes 只显示进程,不显示线程。
-a, --accumulated 在 Disk Read 和 Disk Write 列显示的是从 iotop 启动开始,累计的数据量。
-k, --kilobytes 使用 KB 为单位。
-t, --time 在每一行加上时间戳
-q, --quiet 退出