【问题标题】:Celery tasks profiling芹菜任务分析
【发布时间】:2011-11-20 08:57:27
【问题描述】:

正如我在top 实用程序celery 中看到的那样,进程消耗了大量的CPU 时间。所以我想剖析它。

我可以像这样在开发者机器上手动完成:

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

但要获得准确的时间,我需要在生产机器上对其进行分析。在该机器(Fedora 14)上,celery 由 init 脚本启动。例如

service celeryd start

我发现这些脚本最终会调用manage.py celeryd_multi。所以我的问题是如何告诉celeryd_multi 在启用分析的情况下启动 celery?在我的情况下,这意味着将 -m cProfile -o out.prof 选项添加到 python

非常感谢任何帮助。

【问题讨论】:

    标签: python profiling celery django-celery


    【解决方案1】:

    我认为您混淆了两个不同的问题。您可能正在处理太多的单个任务,或者单个任务可能效率低下。

    您可能知道其中哪一个是问题,但从您的问题中并不清楚是哪一个。

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

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

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

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

    【讨论】:

    • celerymon 现在不维护了。
    猜你喜欢
    • 2014-12-04
    • 1970-01-01
    • 2020-08-04
    • 2012-12-01
    • 2014-04-16
    • 2018-07-04
    • 2012-08-30
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多