Изучение процесса Python, чтобы увидеть, что ест процессор - PullRequest
6 голосов
/ 17 апреля 2009

У меня есть процесс Python (веб-приложение Pylons), который постоянно использует 10-30% процессорного времени. Я улучшу / настрою ведение журналов, чтобы получить некоторое представление о том, что происходит, но до тех пор, есть ли какие-либо инструменты / методы, позволяющие увидеть, что делает процесс python, сколько и насколько занятых потоков у него и т. Д.?

Обновление:

  • настроенный журнал доступа, который показывает, что никаких запросов не происходит, webapp просто бездействует
  • нет смысла вставлять paste.profile в цепочку промежуточного программного обеспечения, так как нет запросов, активность должна выполняться либо в рабочих потоках веб-приложения, либо на веб-сервере paster
  • работает paster следующим образом: "python -m cProfile -o outfile / usr / bin / paster serve dev.ini", и проверка результатов показывает, что большая часть времени проводится в "posix.waitpid". Paster запускает webapp в подпроцессе, активность подпроцесса не отслеживается профилировщиком
  • ищет; взламывая команду PasteScript «служить», чтобы подпроцессы были профилированы

Еще одно обновление:

После долгих поворотов, залипания профилировщика в разных местах и ​​ознакомления с внутренностями PasteScript я обнаружил, что постоянная загрузка ЦП исчезает, если приложение запускается без параметра "--reload" (этот флаг говорит paster перезапускать себя при изменении кода , удобно в разработке), что хорошо в производственной среде.

Ответы [ 2 ]

7 голосов
/ 17 апреля 2009

Профилирование может помочь вам узнать немного о том, что он делает. Если вы отсортируете выходные данные по времени, вы увидите, какие функции сокращают время процессора, что должно дать вам несколько полезных советов.

6 голосов
/ 24 апреля 2009

Как вы заметили, в режиме --reload Paste сканирует файловую систему каждую секунду, чтобы увидеть, изменился ли какой-либо из загруженных файлов. Если они есть, то Paste перезагружает процесс. При желании вы также можете вручную указать Paste для отслеживания изменений в не-Python-модулях кода.

Вы можете изменить интервал перезагрузки с параметром --reload-interval, это уменьшит загрузку ЦП при использовании --reload, поскольку оно будет проходить реже.

...