程序正在大量读取磁盘,但我不知道它正在读取哪个文件,也不知道它正在读取的代码中的哪个位置。
Linux上有什么工具可以监控吗?
答案 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磁盘。