程序正在大量读取磁盘,但我不知道正在读取哪个文件,也不知道正在读取的代码中的哪个位置。Linux上C++应用程序的磁盘IO分析器
在linux上有没有什么工具可以监控这个?
相关的问题(窗口):Disk IO profiler for existing applications
程序正在大量读取磁盘,但我不知道正在读取哪个文件,也不知道正在读取的代码中的哪个位置。Linux上C++应用程序的磁盘IO分析器
在linux上有没有什么工具可以监控这个?
相关的问题(窗口):Disk IO profiler for existing applications
所以,你可以使用: /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
如果系统真的是忙IO,只看top
,你会看到IO绑定进程通常停留在D状态。
strace -c myprog
是我第一次尝试所有通用“我的应用程序在做什么/花费大多数时间”问题的最佳朋友。 Strace还可以附加到正在运行的进程,以便您可以在程序运行时观察它。
另一个好的技巧就是将它输出(与strace -o myprogrun.log
)到一个日志文件中,然后使用现代的vim
查看它,因为它可以非常好地突出显示日志。以这种方式查找事情要容易得多,因为默认的strace输出不是非常容易理解的。
要记住的重要事情是登录到另一个分区/磁盘组,而不是IO问题所在!由于strace可以产生大量输出,因此不要引发额外的IO问题。我喜欢在这种场合使用TmpFS或ZRAM RAM磁盘。
我打算建议strace寻找从lsof或者/ proc/
目录/ proc/PID/fd为您提供有关打开进程的文件的一些信息。这不是简介,所以不是答案,但可以帮助你进行研究。 –
谢谢,我没有提到fd文件。干杯! – Barth