web-dev-qa-db-ja.com

gunicornクリティカルワーカータイムアウトエラーを解決するにはどうすればよいですか?

私はnginxとgunicornを使用して2つのサーバーでWebサイトをホストしましたが、

両方のサーバーに同じバージョンのパッケージがあり、Webサイトが正常にホストされている

しかし、私のサーバーの1つで、gunicornは常にタイムアウトし、エラーが発生します

[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid

この後、ウェブページで502 Badgatewayエラーが発生します。ウェブサイトを表示するには、gunicornプロセスを再起動する必要があります。

エラーログは次のとおりです。

2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)   
2014-02-16 14:29:53 [22140] [INFO] Booting worker with pid: 22140

そして、私はこのような継続的なエラーを受け取ります、

2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:57 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE

そして労働者は再び始めます、

2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [22276] [INFO] Booting worker with pid: 22276

再びEPIPEエラーを無視します。これは、gunicornを再起動するまで続きます。そして、このエラーが発生すると、nginxから504ゲートウェイエラーが発生します

34
s.m

これを修正するには、Nginxのタイムアウトフラグを増やします。

Nginxで増加proxy_connect_timeoutおよびproxy_read_timeouthttpディレクティブの下のnginx.confファイルに以下を追加できます。デフォルトは60秒です。

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Nginxサーバーを再起動します。 タイムアウトに関するnginx docs を参照してください。

上記の修正が機能しない場合は、Gunicorn設定でGunicornタイムアウトフラグを増やします。デフォルトのGunicornタイムアウトは30秒です。

-タイムアウト90

タイムアウトに関するGunicornのドキュメント

-t INT、-timeout INT 30この数秒以上サイレント状態のワーカーが強制終了され、再開されます。

通常は30秒に設定します。同期ワーカーの影響が確実である場合にのみ、これを著しく高く設定してください。同期していないワーカーの場合は、ワーカープロセスがまだ通信中であり、単一のリクエストを処理するために必要な時間の長さに関係がないことを意味します。

Gunicorn Docs on Worker Timeouts

これで解決することを願っています。

34
sreekanth