Linux上的C ++应用程序的磁盘IO概要分析器

时间:2011-11-18 11:27:18

标签: c++ linux io profiling

程序正在大量读取磁盘,但我不知道它正在读取哪个文件,也不知道它正在读取的代码中的哪个位置。

Linux上有什么工具可以监控吗?

相关问题(窗口):Disk IO profiler for existing applications

2 个答案:

答案 0 :(得分:5)

所以,你可以使用: /proc/PID/fd 要么 lsof -p PID

知道您的流程使用哪个文件。

例如,使用lsof -p 27666(假设27666是a.out程序的PID),您可以看到:

./a.out 22531 me    9w   REG   8,5   131072   528280 /home/me/tmp/test.db
./a.out 22531 me    9r   REG   8,5   131072   528280 /home/me/tmp/test2.db

答案 1 :(得分:4)

如果系统真的忙于IO,只需查看top,您就会看到IO绑定进程通常处于D状态。

strace -c myprog是我最好的朋友,第一次尝试所有通用的“我的应用程序在做什么/在哪里花费大部分时间”的问题。 Strace还可以附加到正在运行的进程,因此您可以在程序运行时观察它 另一个好的strace技巧是将它(带有strace -o myprogrun.log)输出到日志文件,然后使用现代vim进行查看,因为它可以突出显示日志。以这种方式查找事物要容易得多,因为默认的strace输出不是人类可读的。

要记住的重要一点是要记录到IO问题所在的另一个分区/磁盘组!不要引起额外的IO问题,因为strace会产生大量输出。我喜欢在这种情况下使用TmpFS或ZRAM RAM磁盘。