【问题标题】:Disk IO profiler for a C++ application on LinuxLinux 上 C++ 应用程序的磁盘 IO 分析器
【发布时间】:2011-11-18 11:27:17
【问题描述】:

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

在 linux 上有什么工具可以监控这个吗?

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

【问题讨论】:

  • 目录 /proc/PID/fd 为您提供有关文件进程打开的一些信息。它不是分析,所以不是答案,但可以帮助您进行研究。
  • 谢谢,我不关心 fd 文件。干杯!

标签: c++ linux io profiling


【解决方案1】:

因此,您可以使用: /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

【讨论】:

    【解决方案2】:

    如果系统真的忙于 IO,只需查看top,您就会看到 IO-bound 进程通常卡在 D 状态。

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

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

    【讨论】:

    • 我打算建议 strace 从 lsof 或 /proc//fd/ 找到的文件描述符中查找 write()。非常快速有效。
    猜你喜欢
    • 2011-02-22
    • 2014-08-10
    • 2013-08-16
    • 2011-01-30
    • 1970-01-01
    • 2013-11-21
    • 2013-04-20
    • 2011-01-14
    相关资源
    最近更新 更多