2011-09-19 107 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