トラフィックが非常に少ないデータベースを使用するWebサイトを実行しています。ただし、1日1回または2回、リクエストがタイムアウトし、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
使用しているサーバーには2つの(仮想化された)コアがあるため、ワーカー数を決定するために1 +コア* 2を使用しました。これを修正するためにbuffer-size
パラメータもアップしましたが、それでもエラーが発生します。
これをデバッグし始める場所がわかりません。私はuWSGI(またはPython WSGI実装)を実行した経験がほとんどありません。
タイムアウトをトリガーするオプション(nginx)は
http://wiki.nginx.org/HttpUwsgiModule#uwsgi_read_timeout
デフォルトは60秒です。そのため、そのタイムスライスで出力を生成しないように要求すると、nginxは接続を閉じます。
UWSGIにエラーが表示されない場合(nginxが切断されているために「壊れたパイプ」にあると思われる部分)、生成が非常に遅い理由を調査します