6

我有一个不断使用 10-30% CPU 的 python 进程(Pylons webapp)。我将改进/调整日志记录以了解正在发生的事情,但在此之前,是否有任何工具/技术可以查看 python 进程正在做什么、它有多少线程和有多忙等?

更新:

  • 配置的访问日志显示没有请求正在进行,webapp 只是空闲
  • 没有必要在中间件链中插入 paste.profile,因为没有请求,活动必须在 webapp 的工作线程或粘贴 web 服务器中发生
  • 像这样运行 paste: "python -m cProfile -o outfile /usr/bin/paster serve dev.ini" 并检查结果表明大部分时间都花在了 "posix.waitpid" 上。Paster在子流程中运行webapp,探查器未拾取子流程活动
  • 调查 ;hacking PasteScript "serve" 命令,以便对子进程进行分析

另一个更新:

经过多次修改,在各个地方粘贴分析器并熟悉 PasteScript 内部,我发现如果应用程序在没有“--reload”参数的情况下启动,持续的 CPU 负载就会消失(这个标志告诉 paster 如果代码发生变化,则重新启动,很方便开发),这在生产环境中很好。

4

2 回答 2

7

分析可能会帮助您了解它在做什么。如果您按“时间”对输出进行排序,您将看到哪些函数占用了 cpu 时间,这应该会给您一些很好的提示。

于 2009-04-17T11:22:27.543 回答
6

如您所述,在 --reload 模式下,Paste 每秒扫描一次文件系统,以查看加载的任何文件是否已更改。如果有,Paste 会重新加载该过程。如果需要,您还可以手动告诉 Paste 监视非 Python 代码模块的更改。

您可以使用 --reload-interval 选项更改重新加载间隔,这将减少使用 --reload 时的 CPU 使用率,因为它会减少扫描频率。

于 2009-04-24T03:45:38.397 回答