//安装sysstat
yum install sysstat
// 查看某进程pid的线程io信息
pidstat -d -t -p 6625
05:01:15 PM TGID TID kB_rd/s kB_wr/s kB_ccwr/s Command
05:01:15 PM 6625 - 0.01 0.24 0.00 java
05:01:15 PM - 6625 0.00 0.00 0.00 |__java
05:01:15 PM - 6626 0.00 0.00 0.00 |__java
05:01:15 PM - 6627 0.00 0.00 0.00 |__java
05:01:15 PM - 6628 0.00 0.00 0.00 |__java
05:01:15 PM - 6629 0.00 0.00 0.00 |__java
05:01:15 PM - 6630 0.00 0.00 0.00 |__java
05:01:15 PM - 6631 0.00 0.00 0.00 |__java
05:01:15 PM - 6632 0.00 0.00 0.00 |__java
05:01:15 PM - 6633 0.00 0.00 0.00 |__java
05:01:15 PM - 6634 0.00 0.00 0.00 |__java
// 输出信息
TGID: 线程组id
TID: 线程id
kB_rd/s: 磁盘读取速率
kB_wr/s: 磁盘写入速率
kB_cowr/s: 取消磁盘写入速率,主要是为了减少脏页面缓存时会发生
Command: 命令或应用名称
除此外,通过iostat可以查看linux总的io信息:
iostat
avg-cpu: %user %nice %system %iowait %steal %idle
0.09 0.01 0.07 0.12 0.00 99.72
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.49 0.22 4.66 1317196 27881143
dm-0 0.66 0.22 4.65 1308401 27832024
dm-1 0.00 0.00 0.00 1220 908
同样对于java应用,我们可以通过pidstat先查看io异常的线程tid,再通过jstack分析栈,定位代码即可。