Исходная информация
У меня есть приложение Django, оно работает и довольно хорошо реагирует при низкой нагрузке, но при высокой нагрузке, такой как 100 пользователей в секунду, оно потребляет 100% ЦП, а затем из-за нехватки ЦП. замедляет.
Проблема:
- Профилирование приложения дает мне время, затрачиваемое функциями.
- Это время увеличивается при высокой нагрузке.
- Затраты времени могут быть связаны со сложными вычислениями или ожиданием процессора.
Итак, как найти циклы ЦП, потребляемые фрагментом кода?
Поскольку уменьшение потребления ЦП увеличит время отклика.
- Возможно, я написал чрезвычайно эффективный код, и мне нужно увеличить мощность ЦП
ИЛИ
- Возможно, какой-то глупый код потребляет ЦП и вызывает замедление?
Обновление
- Я использую Jmeter для профилирования своего веб-приложения, это дает мне пропускную способность 2 запроса/сек. [100 пользователей]
- Я получаю среднее время 36 секунд на 100 запросов против 1,25 секунды на 1 запрос.
Дополнительная информация
- Конфигурация Nginx + Uwsgi с 4 рабочими процессами
- База данных не используется, используются ответы REST API
- При первом обращении ответ REST API кэшируется, поэтому не имеет значения .
- Использование
ujson
для разбора json.
Любопытно узнать:
- Python-Django используется очень многими организациями для столь многих крупных сайтов, поэтому должны быть какие-то высококлассные инструменты анализа отладки/памяти ЦП.
- Все, что я нашел, было случайными фрагментами кода, выполняющими профилирование.
задан halfer 23 February 2019 в 19:06
поделиться