У меня есть веб-сайт с базой данных, который получает очень мало трафика. Однако один или два раза в день запрос будет истекать по таймауту, и я увижу эту (или аналогичную) ошибку в 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 отключен), я бы исследовал, почему генерация такая медленная.