gunicorn + nginxでの長時間実行リクエスト


8

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を実行しています。どんな助けでも大歓迎です。

回答:


5

502 Bad Gatewaygunicornワーカーがタイムアウトしたことを意味します。コマンドに--timeoutオプションを追加できますgnuicorn。デフォルトは30秒です。

@ greg-kが注記しているように、proxy_read_timeoutNginxのオプションはさらに別のタイムアウトを制御します。504 Gateway Timeoutエラーが発生した場合は、このオプションを調整できます。


私はこれについて心配してから久しぶり-tですが、質問ですでに持っていたオプションと同じではありませんか?
Matt Luongo 2013年

3

これはおそらくnginx構成の問題です。proxy_read_timeout値を構成しましたか?

このディレクティブは、プロキシされたサーバーの応答の読み取りタイムアウトを設定します。nginxがリクエストへの応答を取得するまで待機する時間を決定します。タイムアウトは、応答全体に対してではなく、2つの読み取り操作の間にのみ確立されます。

ソース:http : //wiki.nginx.org/HttpProxyModule#proxy_read_timeout


開発のために大規模/高速のサーバー($$ :()に移動しましたが、これが再び表示されたら、提案をテストします!
Matt Luongo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.