2011-09-19 5 views
5

에서 볼 수 있듯이 top 유틸리티 celery에서 procecess는 많은 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

'셀러 몬'은 현재 유지 관리되지 않습니다. – harukaeru