2011-09-19 18 views
5

Como puedo ver en top utilidad celery proceso consume mucho tiempo de CPU. Así que quiero perfilarlo.Apile tareas de apio

puedo hacerlo de forma manual en el ordenador de desarrollo, así:

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

Pero para tener tiempos exactos que necesito para perfilar en máquina de producción. En esa máquina (Fedora 14) el apio es lanzado por los scripts init. P.ej.

service celeryd start 

he dado cuenta de estos scripts finalmente llaman manage.py celeryd_multi con el tiempo. Entonces mi pregunta es ¿cómo puedo decir celeryd_multi para comenzar el apio con el perfil habilitado? En mi caso, esto significa agregar opciones -m cProfile -o out.prof al python.

Cualquier ayuda es muy apreciada.

Respuesta

12

Creo que estás confundiendo dos problemas diferentes. Podría estar procesando demasiadas tareas individuales o una tarea individual podría ser ineficiente.

Puede saber cuál de estos es el problema, pero no está claro por su pregunta cuál es.

Para realizar un seguimiento de la cantidad de tareas que se están procesando sugiero que consulte celerymon. Si una tarea en particular aparece con más frecuencia de lo que esperaría, entonces puede investigar de dónde se está llamando.

Perfilar el apio entero probablemente no sea útil, ya que obtendrá muchos códigos sobre los que no tiene control. Como dices, también significa que tienes un problema al ejecutarlo en producción. Sugiero que busque agregar el profiling code directamente en la definición de su tarea.

Puede usar cProfile.run('func()') como una capa de direccionamiento indirecto entre el apio y su código para que cada ejecución de la tarea esté perfilada. Si genera un nombre de archivo único y lo pasa como el segundo parámetro al run, tendrá un directorio lleno de datos de perfil que puede inspeccionar tarea por tarea, o use pstats.add para combinar varias tareas juntas.

Finalmente, el perfilado por tarea significa que también puede activar o desactivar los perfiles usando una configuración en su código de proyecto globalmente o por tarea, en lugar de tener que modificar los guiones de inicio en su servidor.

+0

'celerymon' no se mantiene ahora. – harukaeru

Cuestiones relacionadas