Назад | Перейти на главную страницу

Как мне отладить этот Nginx по таймауту uWSGI?

У меня есть веб-сайт с базой данных, который получает очень мало трафика. Однако один или два раза в день запрос будет истекать по таймауту, и я увижу эту (или аналогичную) ошибку в Nginx. error.log:

2013/06/13 18:32:40 [error] 16723#0: *27796 upstream timed out (110: Connection timed out)
while reading response header from upstream, client: 199.71.215.214, server:
app.mypythonwebapp.com, request: "POST /api?submit_staker_response HTTP/1.1", upstream:
"uwsgi://unix:/var/run/uwsgi/app.mypythonwebapp.com-uwsgi.sock", host:
"app.mypythonwebapp.com", referrer:
"https://app.mypythonwebapp.com/survey/5/791/70ea73eb9a489f2dead804a95c400ab2"

Я использую uWSGI, и в его файле журнала (что я могу сказать) с этим вообще ничего не связано. Я подозревал, что это может быть связано с PostgreSQL, но если я проверю его статус через pg_stat_activity Я не вижу ничего необычного.

Это мой конфигурационный файл uWSGI YAML:

uwsgi:
    socket: /var/run/uwsgi/%n-uwsgi.sock
    workers: 5
    buffer-size: 32768
    callable: app
    wsgi-file: /opt/sites/app.mypythonwebapp.com/run.py
    virtualenv: /opt/virtualenv/app.mypythonwebapp.com
    pythonpath: /opt/sites/app.mypythonwebapp.com

Сервер, на котором я работаю, имеет два (виртуализированных) ядра, поэтому я сделал 1 + ядра * 2, чтобы определить количество рабочих. Я также увеличил buffer-size параметр, чтобы попытаться исправить это, но ошибка все еще возникает.

Я не уверен, с чего начать отладку. У меня мало опыта использования uWSGI (или любой реализации Python WSGI).

Параметр, запускающий тайм-аут (в nginx):

http://wiki.nginx.org/HttpUwsgiModule#uwsgi_read_timeout

его значение по умолчанию - 60 секунд, поэтому, если ваш запрос не генерирует вывод за этот временной интервал, nginx закроет соединение.

Если вы не видите ошибки в uWSGI (часть, я полагаю, из «сломанной трубы», поскольку nginx отключен), я бы исследовал, почему генерация такая медленная.