2011-09-19 108 views
5

正如我在top实用程序celery中看到的,过程会消耗大量CPU时间。所以我想描述它。芹菜任务剖析

我可以做手工开发机器上像这样:

python -m cProfile -o test-`date +%Y-%m-%d-%T`.prof ./manage.py celeryd -B 

但有准确的计时,我需要它型材生产的机器上。在该机器上(Fedora 14),芹菜由init脚本启动。例如。

service celeryd start 

我已经想通了这些脚本最终最终会调用manage.py celeryd_multi。所以我的问题是我怎么能告诉celeryd_multi启动配置启用芹菜?在我的情况下,这意味着将-m cProfile -o out.prof选项添加到python

任何帮助,非常感谢。

回答

12

我认为你混淆了两个单独的问题。你可能会处理太多的个人任务,或者个人任务可能效率低下。

你可能知道这些是哪一个问题,但是从你的问题中不清楚它是哪一个。

要跟踪正在处理的任务数量,建议您查看celerymon。如果某个特定任务出现的频率更高,那么您可以调查从哪里调用。

分析整个芹菜可能没有帮助,因为你会得到很多你无法控制的代码。正如你所说,这也意味着你在生产中遇到问题。我建议你看看直接将profiling code添加到你的任务定义中。

您可以使用cProfile.run('func()')作为芹菜和您的代码之间的间接层,以便对任务的每次运行进行概要分析。如果生成一个唯一的文件名并将其作为第二个参数传递给run,那么您将拥有一个目录完整的配置文件数据,您可以逐个检查任务,或使用pstats.add将多个任务运行组合在一起。

最后,按任务分析意味着您还可以使用全局或任务项目代码中的设置打开或关闭分析,而不需要修改服务器上的init脚本。

+0

'celerymon'现在不维护。 – harukaeru