如何剖析多线程程序?

4 投票
2 回答
1513 浏览
提问于 2025-04-16 08:09

我有一个程序,运行得非常慢,我想对它进行性能分析。不过,这个程序是多线程的,所以我找不到一个好的方法来分析它。有没有什么建议?

我试过yappi这个工具,但在OS X上它崩溃了 :(

补充一下:这个程序是用Python写的,抱歉之前没说明。

2 个回答

2

根据你在排查问题时的进展,有一些工具可以帮助你找到问题的方向。

  • “top”是一个很有用的工具,可以让你知道你的问题是因为CPU使用过高,还是只是等待其他东西。

  • “dtruss -c”可以告诉你花了多少时间在什么地方,以及哪些系统调用占用了你大部分的时间。

这两个工具都能给你一些提示,即使你对python一无所知。

如果你只是想使用yappi,设置一个虚拟机并在你的电脑上安装某种Linux系统其实也不算太麻烦。我有时会这样做,尤其是当我想尝试一些新东西的时候。

当然,可能还有我不知道的事情会让这个过程变得不可能或者不值得去做。此外,在虚拟机上运行的其他操作系统进行性能分析,可能不会得到完全相同的结果,但仍然可能会有帮助。

2

你是在使用多线程还是多进程呢?如果你只是用多线程,那可能就是问题所在。因为在多处理器的系统上,Python的多线程会有一些麻烦,这主要是因为有个叫做全局解释器锁(GIL)的东西。现在他们正在努力修复这个问题,目标是让你的程序在单核和多核上运行速度差不多,至少在Python 3.2版本中会有所改善。

如果你还不太相信,可以看看线程环程序的测试结果。用单核运行的速度比用四核运行还要快。

如果你改用多进程的话,分析程序的性能也会变得比较复杂,因为你需要从每个独立的进程中运行CProfiler。不过,有一些问题答案可以帮助你找到解决办法。

撰写回答