2009-04-17 12 views
6

Ho un processo Python (webapp Pylons) che utilizza costantemente il 10-30% della CPU. Migliorerò/ottimizzerò la registrazione per avere un'idea di cosa sta succedendo, ma fino ad allora, ci sono strumenti/tecniche che permettono di vedere cosa sta facendo il processo Python, quanti thread occupati e quanti thread ha occupato?Studio del processo Python per vedere cosa sta mangiando CPU

Aggiornamento:

  • configurato log di accesso che dimostra che non ci sono richieste in corso, webapp è solo al minimo
  • nessun punto per collegare paste.profile nella catena di middleware in quanto non ci sono richieste , l'attività deve avvenire sia nei thread di lavoro webapp o nel server Web paster
  • eseguendo il paster in questo modo: "python -m cProfile -o file di uscita/usr/bin/paster serve dev.ini" e l'ispezione dei risultati mostra che la maggior parte del tempo è stata spesa in "posix.waitpid". Paster corre webapp in sottoprocesso, l'attività sottoprocesso non viene raccolto da profiler
  • esaminando; l'hacking PasteScript "servire" il comando in modo che sottoprocessi otterrebbe profilato

Un altro aggiornamento:

Dopo tanto armeggiare , incollando il profiler in vari punti e familiarizzando con gli interni di PasteScript, ho scoperto che il carico costante della CPU scompare se l'applicazione viene avviata senza il parametro "--reload" (questa bandiera indica al paster di riavviarsi da sola se cambia il codice, utile nello sviluppo), che va bene nell'ambiente di produzione.

+1

Quale sistema operativo? – mavnn

risposta

7

Profiling potrebbe aiutarti a imparare un po 'di ciò che sta facendo. Se ordinate l'output per "tempo", vedrete quali funzioni stanno riducendo la durata della CPU, il che dovrebbe darvi alcuni buoni suggerimenti.

6

Come si è notato, in modalità -raccolta, Paste spazza il filesystem ogni secondo per vedere se uno qualsiasi dei file caricati è stato modificato. Se lo sono, quindi Incolla ricarica il processo. Puoi anche dire manualmente a Paste di monitorare i moduli di codice non Python per eventuali modifiche.

È possibile modificare l'intervallo di ricarica con l'opzione --reload-interval, questo ridurrà l'utilizzo della CPU quando si utilizza --reload in quanto verrà eseguito meno spesso.

Problemi correlati