web-dev-qa-db-ja.com

このNginxからuWSGIへのタイ​​ムアウトをデバッグするにはどうすればよいですか?

トラフィックが非常に少ないデータベースを使用する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実装)を実行した経験がほとんどありません。

5
skyler

タイムアウトをトリガーするオプション(nginx)は

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

デフォルトは60秒です。そのため、そのタイムスライスで出力を生成しないように要求すると、nginxは接続を閉じます。

UWSGIにエラーが表示されない場合(nginxが切断されているために「壊れたパイプ」にあると思われる部分)、生成が非常に遅い理由を調査します

3
roberto