Как узнать, сколько процессора потребляет часть Python?

Исходная информация

У меня есть приложение Django, оно работает и довольно хорошо реагирует при низкой нагрузке, но при высокой нагрузке, такой как 100 пользователей в секунду, оно потребляет 100% ЦП, а затем из-за нехватки ЦП. замедляет.

Проблема:

  • Профилирование приложения дает мне время, затрачиваемое функциями.
  • Это время увеличивается при высокой нагрузке.
  • Затраты времени могут быть связаны со сложными вычислениями или ожиданием процессора.

Итак, как найти циклы ЦП, потребляемые фрагментом кода?

Поскольку уменьшение потребления ЦП увеличит время отклика.

  • Возможно, я написал чрезвычайно эффективный код, и мне нужно увеличить мощность ЦП

ИЛИ

  • Возможно, какой-то глупый код потребляет ЦП и вызывает замедление?

Обновление

  • Я использую Jmeter для профилирования своего веб-приложения, это дает мне пропускную способность 2 запроса/сек. [100 пользователей]
  • Я получаю среднее время 36 секунд на 100 запросов против 1,25 секунды на 1 запрос.

Дополнительная информация

  • Конфигурация Nginx + Uwsgi с 4 рабочими процессами
  • База данных не используется, используются ответы REST API
  • При первом обращении ответ REST API кэшируется, поэтому не имеет значения .
  • Использование ujsonдля разбора json.

Любопытно узнать:

  • Python-Django используется очень многими организациями для столь многих крупных сайтов, поэтому должны быть какие-то высококлассные инструменты анализа отладки/памяти ЦП.
  • Все, что я нашел, было случайными фрагментами кода, выполняющими профилирование.
6
задан halfer 23 February 2019 в 19:06
поделиться