Gunicorn + Gevent: отладка рабочих из-за зависания состояния / РАБОЧЕЕ ВРЕМЯ причина

Я использую очень простой веб-сервер, использующий Django на Gunicorn с работниками Gevent, которые общаются с MySQL для простых операций типа crud. Все это за nginx и размещено на AWS. Я запускаю свой сервер приложений, используя следующую конфигурацию:

gunicorn --logger-class=simple --timeout 30 -b :3000 -w 5 -k gevent my_app.wsgi:application

Однако иногда рабочие просто застревают (иногда, когда количество запросов увеличивается. Иногда даже без него), и TPS падает, когда nginx возвращает код ошибки 499 HTTP. Иногда рабочих начали убивать (WORKER TIMEOUT) и запросы сброшены.

Я не могу найти способ отладки, когда рабочие застревают. Я проверил медленные журналы MySQL, и это не проблема здесь.

На Яве я могу взять jstack чтобы увидеть состояние потоков или некоторые другие механизмы, такие как takipi который обеспечивает состояние потоков тогда, когда возникает исключение.

Для всех людей, которые могут помочь, я призываю вас помочь мне найти способ увидеть внутреннее состояние размещенного веб-сервера Python, т.е.

  • рабочие заявляют в данный момент
  • состояние потоков в заданной точке
  • которые все запросы конкретного работника gevent начали обрабатывать и когда он застревает / убивается, где он на самом деле застревает
  • все запросы были прекращены из-за убийства работника
  • так далее

Я искал это и нашел много людей, сталкивающихся с подобными проблемами, но их решения кажутся хитрыми и пробными, и нигде нет упомянутых шагов о том, как углубиться в это.

0 ответов

Другие вопросы по тегам