261

3 つのワーカー 30 のワーカー接続と eventlet ワーカー クラスを使用して gunicorn をセットアップしました。Nginxの背後にセットアップされています。数回のリクエストごとに、ログにこれが表示されます。

[ERROR] gunicorn.error: WORKER TIMEOUT (pid:23475)
None
[INFO] gunicorn.error: Booting worker with pid: 23514

なぜこうなった?どうすれば何がうまくいかないのかを理解できますか?

ありがとう

4

16 に答える 16

236

Django+nginx+gunicorn を使用しても同じ問題が発生しました。Gunicorn のドキュメントから、ほとんど違いのないグレースフル タイムアウトを構成しました。

いくつかのテストの後、解決策が見つかりました。構成するパラメーターは次のとおりです: タイムアウト (および正常なタイムアウトではありません)。それは時計のように動作します..

だから、する:

1) ガンコーン設定ファイルを開く

2) TIMEOUT を必要に応じて設定します - 値は秒単位です

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE
于 2014-06-19T11:52:48.177 に答える
30

で Gunicorn を実行し--log-level debugます。

アプリのスタック トレースが表示されるはずです。

于 2012-08-18T16:21:42.450 に答える
12

これでしょうか? http://docs.gunicorn.org/en/latest/settings.html#timeout

その他の可能性としては、応答に時間がかかりすぎているか、応答が滞っている可能性があります。

于 2013-08-06T03:34:43.767 に答える
5

これは私のために働いた:

gunicorn app:app -b :8080 --timeout 120 --workers=3 --threads=3 --worker-connections=1000

eventlet追加した場合:

--worker-class=eventlet

gevent追加した場合:

--worker-class=gevent
于 2020-06-08T01:01:23.420 に答える
1

タイムアウトは、この問題の重要なパラメーターです。

しかし、それは私には適していません。

ワーカーを 1 に設定すると、gunicorn タイムアウト エラーが発生しないことがわかりました。

コードを調べると、サーバーの初期化にソケット接続 (socket.send & socket.recv) が見つかりました。

socket.recv はコードをブロックするため、workers>1 の場合は常にタイムアウトになります

私に問題を抱えている人々にいくつかのアイデアを提供したいと考えています

于 2019-11-28T08:53:04.717 に答える
1

GCP を使用している場合は、インスタンス タイプごとにワーカーを設定する必要があります。

GCP のベスト プラクティスへのリンクhttps://cloud.google.com/appengine/docs/standard/python3/runtime

于 2019-06-11T01:05:58.760 に答える
0

私にとっては、Django のデータベース サーバーにファイアウォール ルールを設定するのを忘れていたためです。

于 2020-09-14T07:04:47.080 に答える