Исследование процесса python, чтобы увидеть, что ест процессор


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

Обновление:

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

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

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

2 6

2 ответа:

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

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

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