Djangoを利用したアプリケーション用の統合サーバーを作成しました。一部の機能はまだ実験段階であり、リクエストが非常に長くなります。
今のところ、パフォーマンスの低下は問題ありませんが、統合できるようにする必要があります。長いリクエストにつながる機能を使用すると、アプリは(予想どおり)ハングし、おそらく1分半後に「502-Bad Gateway」を返します。アプリの残りの部分は問題なく動作します。
私はgunicornログをチェックしました、そしてこれが起こるときはいつでも私は次のような行を取得します
2012-01-20 17:30:13 [23128] [DEBUG] GET /results/
2012-01-20 17:30:43 [23125] [ERROR] WORKER TIMEOUT (pid:23128)
Traceback (most recent call last):
File "/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py", line 111, in run
os.setpgrp()
OSError: [Errno 1] Operation not permitted
ただし、これは実際のワーカータイムアウトのかなり前に発生します。念のため、10分に設定しました。これは、gunicornを実行するupstartスクリプトの一部です。
description "..."
start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 5 seconds
kill timeout 5
respawn
env VENV="/path/to/a/virtual/env/"
#how to know the pid
pid file $VENV/run/guniconr-8080.pid
script
exec Sudo -u demo $VENV/bin/gunicorn_Django --preload --daemon -w 4 -t 600 --log-level debug --log-file $VENV/run/gunicorn-8080.log -p $VENV/run/gunicorn-8080.pid -b localhost:8080 /path/to/settings.py
end script
私はgunicornバージョン0.13.4を実行しています。どんな助けでも大歓迎です。
502 Bad Gateway
は、gunicornワーカーがタイムアウトしたことを意味します。 gnuicorn
コマンドに--timeout
オプションを追加できます。デフォルトは30秒です。
@ greg-kが注記しているように、Nginxのproxy_read_timeout
オプションはさらに別のタイムアウトを制御します。 504 Gateway Timeout
エラーが表示された場合は、このオプションを調整できます。
これはおそらくnginx構成の問題です。 proxy_read_timeout値を構成しましたか?
このディレクティブは、プロキシされたサーバーの応答の読み取りタイムアウトを設定します。 nginxがリクエストへの応答を取得するために待機する時間を決定します。タイムアウトは、応答全体に対してではなく、2つの読み取り操作の間にのみ確立されます。
ソース: http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout