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


26

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

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

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

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

そしてこの後、ウェブページに502 Badgatewayエラーが表示されます。Webサイトを表示するには、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ゲートウェイエラーを受け取ります


1
詳細を教えてください。Gunicornを起動するために使用しているコマンドラインは、良いスタートです。
supervacuo

それが立ち往生だ場所を確認するために労働者をトレース:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog

実行しているアプリケーションは何ですか?デフォルトのタイムアウトを増やしたい場合があります。
バーハンKhalid 14

はい、Burhan Khalid、今のところnginxでproxy_read_timeoutを1200に、gunicorn構成でタイムアウトを3600に増やしました。この作品を願って
SM

@sm-うまくいきましたか?
iamkhush

回答:


29

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

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

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

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

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

-タイムアウト90

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

-t INT、-timeout INT 30これより長い時間サイレントになっているワーカーは、強制終了されて再起動されます。

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

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

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


2
このソリューションは、1日中解決策を探していた後に命を救いました。30秒より長い時間を実行するプロセスがある場合(これが私の問題でした)、これは間違いなく正しい解決策です。
アレックスP.ミラー

はい、30秒以上実行されるシナリオもあるため、ソリューションを採用しました。助かりました。
-sreekanth

このようなシナリオはありません。現場にはわずかなトラフィックがありますが、ワーカーは毎日ほぼ同時にタイムアウトします。その後、1〜2分後に実行されます。私のセットアップはnginx-スーパーバイザー-gunicorn-djangoです。120秒のタイムアウトがあります。
iamkhush

proxy_connect_timeout: "プロキシされたサーバーとの接続を確立するためのタイムアウトを定義します。このタイムアウトは通常75秒を超えることはできません。"
deweydb

@iamkhushはこの修正を理解できましたか?また、アプリケーションがアイドル状態であっても、この問題に直面しています。Gunicornワーカーは毎日タイムアウトしますが、タイムアウトを増やすような解決策は機能しないようです。
アンキットジャイスワル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.