如何对多线程程序进行性能分析?

4

我有一个程序性能严重不足,想要对其进行分析。然而,它是多线程的,所以我找不到一个好的方法来分析这个程序。有什么建议吗?

我尝试过yappi,但在OS X上会导致段错误 :(

编辑:这是Python代码,抱歉将其放在了分析类别下...

2个回答

2
你是多线程还是多进程?如果你只是在多线程,那就是问题所在。由于全局解释器锁(GIL),Python 目前在多处理器系统上存在多线程问题。他们正在努力修复 Python 3.2 的问题,至少使您的程序在单核和多核上运行速度相同。
如果你还不确定,可以看一下 thread-ring 程序的 shootout 结果。使用单个核心比使用四个核心更快。
现在,如果你使用 multiprocessing,分析也可能很困难,因为你必须从每个独立的进程中运行 CProfiler。然而,有一些问题可以指导你朝正确的方向发展。

thread-ring 不是一个好的例子,因为 thread-ring 主要涉及任务切换。因此,Java 单核比 Java 四核更快。http://shootout.alioth.debian.org/u32/program.php?test=threadring&lang=java&id=4 - igouy

2
根据您在故障排除方面的进展,有一些工具可能会指引您朝正确的方向前进。
"top"是一个有用的起点,可以显示您的问题是烧CPU时间还是只等待一些东西。
"dtruss -c"可以向您展示您花费时间的位置以及哪些系统调用占用了大部分时间。
这两个工具都可以在不知道Python任何信息的情况下给您提示。
如果您只想使用yappi,那么在您的计算机上设置虚拟机并安装某种Linux不需要太多的工作。当我想尝试某些东西时,我发现自己偶尔会这样做。
当然,可能有我不知道的事情使这变得不可能或者不值得付出这样的努力。此外,在另一个运行虚拟化的操作系统上进行分析可能不会给出完全相同的结果,但仍然可能有所帮助。

碰巧的是,我也在虚拟机上设置了yappi,果然,yappi失败了。 - alexgolec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接