使用iotop -p PID实时监控指定进程的磁盘IO速率,重点关注“IO>”列(写入速率)和“IO<”列(读取速率),需先用pidof或pgrep获取真实运行中的进程PID。

在麒麟系统中实时监控某个进程的文件读写速度,需要结合系统自带的工具链获取精确的I/O吞吐数据,不能仅依赖top或ps这类只显示CPU/内存的命令。
确认目标进程PID
先用pidof或pgrep查出进程ID,例如监控名为nginx的进程:pidof nginx 或 pgrep -f "nginx: master"。若返回多个PID,取主进程(通常数值最小的那个)。
注意:必须使用真实运行中的进程名,【进程已退出则后续所有监控将失败】。
使用iotop实时查看该进程的磁盘IO速率
安装并运行iotop(如未预装):sudo apt install iotop → sudo iotop -p PID,其中PID替换为上一步查到的数字。
界面中会持续刷新,重点关注“IO>”列(实际写入速率)和“IO
按字母r可反向排序,把IO最高的进程顶到最上方;按q退出。
通过/proc/PID/io提取原始IO统计值
方法一:直接读取累计字节数
执行cat /proc/PID/io | grep -E "read_bytes|write_bytes",得到类似read_bytes: 1249856000和write_bytes: 87654321两行。
方法二:计算瞬时速率(需两次采样)
第一步:记录初始值与时间戳 → T1=$(date +%s.%N); R1=$(cat /proc/PID/io | awk '/read_bytes/ {print $2}'); W1=$(cat /proc/PID/io | awk '/write_bytes/ {print $2}')
第二步:等待2秒 → sleep 2
第三步:再次采集 → T2=$(date +%s.%N); R2=$(cat /proc/PID/io | awk '/read_bytes/ {print $2}'); W2=$(cat /proc/PID/io | awk '/write_bytes/ {print $2}')
第四步:用bash计算差值除以时间差 → awk -v r1=$R1 -v r2=$R2 -v w1=$W1 -v w2=$W2 -v t1=$T1 -v t2=$T2 'BEGIN{dr=r2-r1; dw=w2-w1; dt=t2-t1; printf "Read: %.0f B/s, Write: %.0f B/s\n", dr/dt, dw/dt}'
这一步输出的是近似瞬时平均速率,精度取决于sleep间隔;【若两次读取间进程重启,PID失效,结果完全不可信】。

















