Как профилировать каналы django?

Мой технологический стек - это Redis как серверная часть каналов, Postgresql как база данных, Daphne как сервер ASGI, Nginx перед всем приложением. Все развертывается с использованием Docker Swarm, снаружи остаются только Redis и база данных. У меня около 20 виртуальных хостов с 20 интерфейсными серверами, 40 работниками http и 20 работниками websocket. Балансировка нагрузки выполняется с помощью оверлейной сети Ingress Docker.

Проблема в том, что иногда с производительностью происходят очень странные вещи. Большинство запросов обрабатываются менее чем за 400 мс, но иногда запрос может занять до 2–3 с, даже при очень небольшой нагрузке. Профилирование рабочих с помощью панели инструментов Django Debug Toolbar или профилировщиков на основе промежуточного программного обеспечения ничего не показывает (время примерно 0,01 с)

Мой вопрос: есть ли хороший метод профилирования всего пути запроса с помощью django-каналов? Мне бы хотелось, сколько времени занимает каждая фаза, то есть когда запрос был обработан Дафной, когда рабочий начал обработку, когда она закончилась, когда сервер интерфейса отправил ответ клиенту. В настоящее время я не знаю, как это решить.


person Valar    schedule 26.12.2016    source источник
comment
Если кому-то интересно, похоже, автор этого сообщения пошел и спросил группу Google: groups.google.com/forum / #! topic / django-users / _aG8Py_r2QY   -  person raiderrobert    schedule 22.05.2017
comment
Да, это мой вопрос. Я нашел несколько полезных методов, один из них - мониторинг Redis. Подробное описание скоро выложу здесь.   -  person Valar    schedule 23.05.2017
comment
Будем рады услышать, что сработало для вас.   -  person jaywhy13    schedule 03.08.2017


Ответы (2)


Django-silk может быть полезен для профилирования запросов и времени поиска в базе данных по следующим причинам:

  1. Это легко установить, просто добавив конфигурации в settings.py вашего проекта Django.
  2. Можно настроить: используя предоставленный декоратор, вы можете профилировать функцию или методы и получить их производительность.
  3. Динамическая настройка: вы можете выбрать динамическое распределение шелка по методам, а также установить желаемую скорость профилирования во время выполнения.

Как указано в документации:

Silk - это инструмент для динамического профилирования и проверки фреймворка Django. Silk перехватывает и сохраняет HTTP-запросы и запросы к базе данных, прежде чем представить их в пользовательском интерфейсе для дальнейшей проверки.

Примечание: шелк может удвоить время поиска в вашей базе данных, поэтому это может вызвать некоторые проблемы, если вы установите его в производственной среде. Однако прибавка из шелка будет показана отдельно на приборной панели.

https://github.com/jazzband/django-silk

person Lord Vice    schedule 17.10.2018
comment
Хотя это может дать ответ на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. - person Tiago Martins Peres 李大仁; 17.10.2018

Почему бы не прикрепить инструмент мониторинга, например Kibana или New Relic, и отслеживать, почему и что так долго для небольшого отклика полезной нагрузки. Он может сказать вам, сколько времени было потрачено на Python, PostgreSQL и Memcache (Redis).

person IVI    schedule 16.10.2017
comment
newrelic пока не поддерживает asgi, насколько я знаю - person doniyor; 08.04.2018