【发布时间】:2011-09-09 23:21:06
【问题描述】:
我正在开发一个复杂的网络软件,但我无法确定如何提高系统性能。
特别是在使用阻塞同步调用的软件的一部分中。由于系统的这一部分正在执行大量计算,因此几乎不可能确定该组件的缓慢是由这些计算还是由系统的其他部分造成的。
是否有任何轻量级的分析器可以捕获这些信息?我不能使用像 valgrind 这样的重型配置文件,因为这会完全扭曲结果(尽管 valgrind 会很完美,因为它可以捕获所有必需的信息)。
我尝试使用 oProfile,但无法从中获得任何有意义的结果(也许如果某处有简明教程...)。
【问题讨论】:
-
我再给 oprofile 一个机会,谷歌“oprofile 教程”看看你是否找到任何符合你需要的东西
-
@Fredrik 问题是我能够使用这些教程运行 oprofile,但我无法从中获得任何有意义的信息。这是教程未涵盖的内容,它们通常以“现在我们有了结果”结尾。
-
ltrace和strace非常有助于了解代码在哪里花费时间,尤其是使用 -c 开关(概述/摘要)和 -e 开关(深入了解详细信息)。 -
@William Pursell gprof 仅捕获用户时间
-
@Let_Me_Be 也许我不明白这个问题。如果您需要知道系统调用花费了多少时间,请在其周围放置一个包装器,gprof 会告诉您在包装器中花费的时间。重构代码以增加模块化通常足以让 gprof 告诉你想要什么。
标签: c linux networking profiling distributed