![进程的总 I/O 成本](https://linux22.com/image/744775/%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%80%BB%20I%2FO%20%E6%88%90%E6%9C%AC.png)
我知道这iotop
可以让我实时测量任何或所有进程使用的磁盘带宽。iotop -a
测量累积的磁盘带宽,这更接近我想要的。
但是,当我运行的进程终止时,它在 iotop 中消失得太快,我无法准确看到该进程自启动以来总共使用了多少 I/O。有没有办法记录进程结束时的总 I/O 使用情况,并将其保存到某个文件中以供进一步分析?
请注意,我只寻找 Linux 独有的答案,特别是 Ubuntu。
答案1
尝试PID统计. 使用方法如下:pidstat -d -e command
pidstat
能够报告 Linux 任务的统计信息。-d
指示pidstat
收集 IO 统计信息。pidstat
命令完成后将停止并打印报告。
答案2
iotop
有--batch
选项,您可以使用它来非交互地处理它。这将允许您执行(例如):
sudo iotop --batch -qqq --accumulated | fgrep --line-buffered '% dd ' | tee ~/dd.log
其输出结果如下:
19804 be/4 user 0.00 B 0.00 B 0.00 % 0.00 % dd if=/dev/zero of=/tmp/log.1 bs=1M count=10000
19804 be/4 user 0.00 B 755.18 M 0.00 % 30.99 % dd if=/dev/zero of=/tmp/log.1 bs=1M count=10000
19804 be/4 user 0.00 B 1029.48 M 0.00 % 50.96 % dd if=/dev/zero of=/tmp/log.1 bs=1M count=10000
与您的字符串匹配的最后一行fgrep(1)
(在此示例中为寻找dd
命令)是您的最终累积行。
此外,输出将保留以供您稍后根据需要进行解析。(如果您想将所有 iotop 输出保存到日志文件,而不仅仅是示例中的特定输出,~/dd.log
您还可以反转顺序)tee
fgrep
dd