【问题标题】:How can I profile a multithreaded program?如何分析多线程程序?
【发布时间】:2011-05-21 09:21:31
【问题描述】:

我有一个程序在标准水平下执行 waaaay,我想对其进行分析。但是,它是多线程的,所以我似乎找不到一个很好的方法来分析这个东西。有什么建议吗?

我已经尝试过 yappi,但它在 OS X 上会出现段错误:(

编辑:这是在 python 中,很抱歉将其置于分析之下...

【问题讨论】:

    标签: python multithreading performance profile


    【解决方案1】:

    您是多线程还是多处理?如果您只是多线程,那么这就是问题所在。由于全局解释器锁 (GIL),Python 目前在多处理器系统上存在多线程问题。他们正在努力为 Python 3.2 修复它 - 至少这样您的程序在单核上的运行速度与在多核上的运行速度一样快。

    如果您不相信,请查看线程环计划的枪战结果。使用single core 运行比使用quad cores 运行更快。

    现在,如果您改用多处理,分析也可能很困难,因为您必须从每个单独的进程运行 CProfiler。不过,some questionspoint you 的方向是正确的。

    【讨论】:

    • thread-ring 不是一个很好的例子,因为 thread-ring 是关于任务切换的——所以 Java 单核也比 Java 四核更快。 shootout.alioth.debian.org/u32/…
    【解决方案2】:

    根据您在故障排除方面取得的进展,有些工具可能会为您指明正确的方向。

    • “top”是一个有用的开始,它可以告诉您您的问题是消耗 CPU 时间还是只是在等待。

    • “dtruss -c”可以显示您在哪里花费时间以及哪些系统调用占用了您的大部分时间。

    这两个都可以给你一个提示,而不需要对python一无所知。

    如果你只是想使用 yappi,那么在你的机器上设置一个 virtualbox 并安装某种 Linux 并不是太多的工作。当我想尝试某事时,我发现自己有时会这样做。

    当然,可能有些事情我不知道,这使得它不可能或不值得付出努力。此外,在另一个运行虚拟化的操作系统上进行分析可能不会给出完全相同的结果,但它仍然可能会有所帮助。

    【讨论】:

    • 碰巧我也在虚拟机上设置了yappi,果然yappi失败了。
    猜你喜欢
    • 2010-10-13
    • 2010-09-05
    • 2012-03-19
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2011-06-15
    • 2011-01-30
    相关资源
    最近更新 更多