Gunicorn: Docker + AWSでGunicorn同期ワヌカヌがタむムアりト

䜜成日 2016幎01月29日  Â·  78コメント  Â·  ゜ヌス: benoitc/gunicorn

AWSのUbuntu14.04LTSで実行されおいるDockerむメヌゞ内でgunicorn19.4.5を䜿甚するず、1を超える同期ワヌカヌずデフォルトの30秒のタむムアりト期間で実行するず、䞀定のワヌカヌタむムアりトが衚瀺されたす。 これは588たたは942に関連しおいる可胜性がありたすが、これはgunicornの非垞に新しいバヌゞョンであるため、はっきりずはわかりたせん。

数回の実行にわたる状況蚌拠は、ワヌカヌの1人が圱響を受けおいないこずを瀺唆しおいるようであり、倱敗しお再起動し続けるのは残りのN-1ワヌカヌだけです。 ただし、これを瀺唆するデヌタポむントはわずかしか取埗できなかったため、匷力なシグナルずは芋なさないでください。

これが私がチェックしたものです

  • 問題はDockerの倖郚で発生したすか、それずも同じDockerむメヌゞを䜿甚しおいるが、AWSでは発生したせんか
    いいえ、AWSのdockerでのみ問題を再珟できたした。
  • アプリケヌションの初期化には30秒以䞊かかりたすか
    いいえ、アプリケヌションは1秒以内に初期化を完了したす。
  • アプリケヌションは、ハングする原因ずなる芁求を受け取りたすか
    この問題は、アプリケヌションに䜕の芁求も行われずに発生したした。
  • アプリケヌションが壊れた初期化コヌドを持っおいお、gunicornを混乱させおいたすか
    この問題は、gunicornを同じ構成1぀以䞊の同期ワヌカヌを䜿甚で実行しおいるが、アプリケヌションが異なる堎合に発生したした。 この新しいアプリケヌションは、geventワヌカヌを䜿甚する堎合、gunicornで問題なく実行されたす。
  • dockerのファむルシステムはctimeの曎新に倱敗したすか
    以䞋のログを参照しおください-ctimeは通垞正垞に進行しおいるようです。 Dockerのファむルシステムでは、削陀されたファむルに察しおstat -Lを蚱可しおいたせんが、gunicornがファむルのリンクを解陀できないようにするず、 stat -Lが発生し、ctimeが通垞どおり曎新されおいるこずが瀺されたす。

workertmp.pyにコヌドを远加しお、各チェックの読み取りctimeをログに蚘録したした。これは、そのようなログの1぀ですすべおのワヌカヌ間でむンタヌリヌブされおいたす。

[2016-01-29 00:21:38 +0000] [3238] [INFO] Starting gunicorn 19.4.0
[2016-01-29 00:21:38 +0000] [3238] [INFO] Listening at: http://0.0.0.0:5000 (3238)
[2016-01-29 00:21:38 +0000] [3238] [INFO] Using worker: sync
[2016-01-29 00:21:38 +0000] [3243] [INFO] Booting worker with pid: 3243
[2016-01-29 00:21:38 +0000] [3244] [INFO] Booting worker with pid: 3244
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026899.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026900.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026900.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026900.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026900.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026899.03
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026905.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026905.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026905.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026905.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026904.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026909.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026910.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026909.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026910.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026909.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026910.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026909.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026910.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026909.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026914.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026933.73
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026934.74
FOOBAR: modify /tmp/wgun[2016-01-29 00:22:25 +0000] [3238] [CRITICAL] WORKER TIMEOUT (pid:3243)
[2016-01-29 00:22:25 +0000] [3243] [INFO] Worker exiting (pid: 3243)
[2016-01-29 00:22:25 +0000] [3330] [INFO] Booting worker with pid: 3330
icorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunic54026934.74
FOOBAR: modify /tmp/wgun[2016-01-29 00:22:25 +0000] [3238] [CRITICAL] WORKER TIMEOUT (pid:3243)
[2016-01-29 00:22:25 +0000] [3243] [INFO] Worker exiting (pid: 3243)
[2016-01-29 00:22:25 +0000] [3330] [INFO] Booting worker with pid: 3330
icorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time:fy] [3238] [CRITICAL] WORKER TIMEOUT (pid:3243)
[2016-01-29 00p/2:25 +0000] [3243] [INFO] Worker exiting (pid: 3243)
[2016-0ic29 00:22:25 +0000] [3330] [INFO] Booting worker with pid: 33myicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorntiyjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt45ime: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026945.82
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026946.01
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026946.01
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026946.01
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8corn-myjLwI time:fy] [3238] [CRITICAL] WORKER TIMEOUT (pid:32BA)
[2016-01-29 00p/2:25 +0000] [3243] [INFO] Worker exiting (pdify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
FOOBAR: modify /tmp/wgunicorn-Mw64T1 timeodify /tmp/wgunicorn-myjLwI time: 1454026964.74
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026965.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026965.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026965.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026965.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026969.74
FOO[2016-01-29 00:22:59 +0000] [3238] [CRITICAL] WORKER TIMEOUT (pid:3330)
[2016-01-29 00:22:59 +0000] [3330] [INFO] Worker exiting (pid: 3330)
icorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026935.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026939.74
FOOBAR: modify /tmp/wgunicorn-LwI time: 1454026965.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 tI time: 1454026940.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026940.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026940.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026940.0
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026944.74
FOOBAR: modify /tmp/wgunicorn-RhAFmt time: 1454026915.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.0
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026945.8
[2016-01-29 00:22:59 +0000] [3396] [INFO] Booting worker with pid: 3396
BAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
FOOBAR: modify /tmp/wgunicorn-myjL26949.74
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
FOOBAR: modify /tmp/w79.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026979.97
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
80.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454029.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454029.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454029.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026979.95
FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
 WORKER TIMEOUT (pid:3396)
 [2016-01-29 00:23:31 +0000] [3396] [INFO] Worker exiting (pid: 3396)
 BAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026970.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026974.74
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw64T1 time: 1454026949.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454026975.0
 FOOBAR: modify /tmp/wgunicorn-Mw6nicorn-k3uZLy time: 1454026980.16
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027005.0
 FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027010.0
 FOOBAR: modify /tmp/wgunicorn-k3uZLy time: 1454026980.16
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027010.0
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027011.08
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027011.28
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027011.28
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027011.28
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmprn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-Znicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027011.06
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027028.98
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wguicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wguicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wguicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027030.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn--ZmVaVS time: 1454027014.74
 FOOBAR: modify /tmp/wgunicorn-myjLwI time: 1454027035.0
 FOOBAR: modify /tmp/wgunicorn-ZmVaVS time: 1454027014.74
 FOOBAR: modify /t[2016-01-29 00:24:05 +0000] [3238] [CRITICAL] WORKER TIMEOUT (pid:3453)
 [2016-01-29 00:24:05 +0000] [3453] [INFO] Worker exiting (pid: 3453)
FeaturIPC PlatforDocker - Bugs -

最も参考になるコメント

代わりにgeventワヌカヌを䜿甚しおみおください。これで、問題は解決したした。

党おのコメント78件

䞊蚘のログからhrmmmは、時間が決しお倉化しおいないこずがわかりたす。 私がチェックしたす

ありがずう、感謝したす

このバグの圱響を受ける可胜性がありたす。

AWSElastic Beanstalk + EC2 Container ServiceのDockerむメヌゞ内でgunicornを実行しおいたす。
AWSでDockerむメヌゞを実行しおいる堎合にのみ、初期化のほが盎埌に発生し始める䞀定のワヌカヌタむムアりトがありたす。
同じHTTPリク゚ストには、数ミリ秒、堎合によっおは20〜30秒かかるこずがありたす。 存圚しないペヌゞ、認蚌されおいない単玔な「Hello world」文字列ペヌゞ、たたはデヌタベヌスからレコヌドをフェッチするペヌゞのいずれであるかは関係ありたせん。

远加の詳现

  • Gunicornのバヌゞョン19.5.0および19.6.0。
  • ベヌスDockerむメヌゞ python3.4  OS Debian Jessie
  • Dockerバヌゞョン1.9.1Amazon ECSによっお管理、 OS Amazon Linux AMI 2016.03Amazon EBによっお管理。
  • WebアプリケヌションフレヌムワヌクDjangoバヌゞョン1.9.6および1.9.7。

圱響を受けない環境

  • ロヌカルマシン、Dockerコンテナの_inside_ず_outside_の䞡方。 OS Ubuntu 16.04 LTS、 Docker 1.11.2。
  • Heroku  OS Ubuntu 14.04 LTS

Amazonコンテナログ

[2016-06-15 16:46:15 +0000] [1] [DEBUG] Current configuration:
  cert_reqs: 0
  post_request: <function PostRequest.post_request at 0x7fb13e187c80>
  worker_connections: 1000
  tmp_upload_dir: None
  enable_stdio_inheritance: False
  timeout: 30
  pre_fork: <function Prefork.pre_fork at 0x7fb13e1871e0>
  worker_int: <function WorkerInt.worker_int at 0x7fb13e1876a8>
  backlog: 2048
  max_requests: 0
  max_requests_jitter: 0
  access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
  logconfig: None
  syslog_addr: udp://localhost:514
  preload_app: False
  pidfile: None
  umask: 0
  secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
  paste: None
  proxy_protocol: False
  worker_class: sync
  on_starting: <function OnStarting.on_starting at 0x7fb13e414c80>
  worker_abort: <function WorkerAbort.worker_abort at 0x7fb13e187840>
  worker_exit: <function WorkerExit.worker_exit at 0x7fb13e187e18>
  config: config/gunicorn.py
  nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7fb13e18a048>
  daemon: False
  accesslog: None
  errorlog: -
  loglevel: debug
  syslog_prefix: None
  ssl_version: 3
  suppress_ragged_eofs: True
  limit_request_field_size: 8190
  reload: False
  logger_class: gunicorn.glogging.Logger
  statsd_host: None
  keyfile: None
  raw_env: []
  threads: 1
  django_settings: None
  proc_name: None
  proxy_allow_ips: ['127.0.0.1']
  limit_request_fields: 100
  ciphers: TLSv1
  check_config: False
  do_handshake_on_connect: False
  post_worker_init: <function PostWorkerInit.post_worker_init at 0x7fb13e187510>
  graceful_timeout: 30
  worker_tmp_dir: None
  certfile: None
  sendfile: None
  keepalive: 2
  chdir: /app/testapp
  when_ready: <function WhenReady.when_ready at 0x7fb13e187048>
  ca_certs: None
  on_exit: <function OnExit.on_exit at 0x7fb13e18a1e0>
  spew: False
  bind: [':8000']
  post_fork: <function Postfork.post_fork at 0x7fb13e187378>
  limit_request_line: 4094
  syslog_facility: user
  workers: 3
  syslog: False
  pre_request: <function PreRequest.pre_request at 0x7fb13e187b70>
  user: 0
  group: 0
  forwarded_allow_ips: ['127.0.0.1']
  pythonpath: None
  on_reload: <function OnReload.on_reload at 0x7fb13e414e18>
  pre_exec: <function PreExec.pre_exec at 0x7fb13e1879d8>
  default_proc_name: config.wsgi
  statsd_prefix: 
[2016-06-15 16:46:15 +0000] [1] [INFO] Starting gunicorn 19.5.0
[2016-06-15 16:46:15 +0000] [1] [DEBUG] Arbiter booted
[2016-06-15 16:46:15 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2016-06-15 16:46:15 +0000] [1] [INFO] Using worker: sync
[2016-06-15 16:46:15 +0000] [8] [INFO] Booting worker with pid: 8
[2016-06-15 16:46:15 +0000] [9] [INFO] Booting worker with pid: 9
[2016-06-15 16:46:15 +0000] [10] [INFO] Booting worker with pid: 10
[2016-06-15 16:46:15 +0000] [1] [DEBUG] 3 workers
[2016-06-15 16:46:52 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:9)
[2016-06-15 16:46:52 +0000] [9] [INFO] Worker exiting (pid: 9)
[2016-06-15 16:46:52 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:10)
[2016-06-15 16:46:52 +0000] [10] [INFO] Worker exiting (pid: 10)
[2016-06-15 16:46:53 +0000] [20] [INFO] Booting worker with pid: 20
[2016-06-15 16:46:53 +0000] [1] [DEBUG] 2 workers
[2016-06-15 16:46:53 +0000] [21] [INFO] Booting worker with pid: 21
[2016-06-15 16:46:53 +0000] [1] [DEBUG] 3 workers
[2016-06-15 16:47:23 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:8)
(...)

`

ありがずう。

私もこれを芋おいたす。 私の疑いは、Elastic LoadBalancerです。 以前の䌚瀟ではpasteを䜿甚しおいたしたが、これがELBで問題を匕き起こしおいたした。 どういうわけか接続を再利甚しおいるず思いたすが、これがpaste問題を匕き起こしおいたした。

私は今、gunicornを䜿甚する新しい仕事に就いおおり、サヌバヌをELBの背埌に配眮し始めるたではすべお問題ありたせんでしたが、Webアプリが非垞に応答しなくなり、ハングしおいるように芋えたす。

代わりにgeventワヌカヌを䜿甚しおみおください。これで、問題は解決したした。

それで、これは接続を維持し、同期ワヌカヌを拘束するELBの問題ですか 同期ワヌカヌで接続を閉じる必芁があるこずを意図的に通知するため、これは非垞に奇劙なこずになりたす https 

ただし、意図的に接続を閉じるこずはできたす。 client.close()呌び出しを無条件に移動するこずをテストしたい堎合は、興味深いテストになる可胜性がありたす //github.com/benoitc/gunicorn/blob/master/gunicorn/workers/sync.py#L199

たた、ELBのアむドルタむムアりトがワヌカヌタむムアりトよりも䜎いこずを確認するこずもできたす。これは、これが問題の原因であるかどうかを迅速に確認するためです http 

@tilgovi the elbは私の珟圚の最良の掚枬です。なぜなら、agunicornがELBの背埌にある堎合にのみ発生し、b geventワヌカヌを䜿甚しお問題が修正されるからです。 しかし、もう䞀床、誰が知っおいたすか。

ELBの背埌でのみ発生し、プロトコルHTTPたたはHTTPSがELBに蚭定されおいる堎合に発生したす。
プロトコルをTCPたたはSSLに倉曎するず、問題は解消されたす。
同期ワヌカヌを䜿甚しお修正する方法を知っおいる人はいたすか これたで説明した修正HTTPではなくTCPを䜿甚しお、アクセスログを監芖し、ELBのHTTP / HTTPSでのみ有効になっおいるX-Forwarded-Forヘッダヌを確認したした:)

奇劙なこずに、同じペヌゞにいるこずを確認するために、これはELBでHTTP / HTTPSオプションを䜿甚するずきに䜕らかの最適化があるこずを意味したすか そしお、この最適化は同期ワヌカヌに問題を匕き起こしおいたすか

@ecs HTTP / HTTPSロヌドバランサヌの堎合、同じTCP接続を再利甚したす。これは、ELBによっお長期間存続したす-ある皮のこずです。 しかし、geventワヌカヌが正垞に機胜する理由は説明されおいたせん...geventはただテストしおいたせんが、これらのコメントを読んでください

ずころで、圱響を䞎える可胜性のある芁因gunicornバヌゞョン、ワヌカヌクラス、Docker内かどうか、ELBプロトコルは確かにたくさんあるので、誰かがELBのTCPプロトコルがHTTPずは異なり動䜜するこずをテストしお確認するのは玠晎らしいこずです。 Ubuntu14.04ずgunicornバヌゞョン19.3.0でホストされおいるDockerでテストしおいたす

私は同じ問題を抱えおいたす
[2016-10-03 12:13:17 +0000] [6] [クリティカル]ワヌカヌタむムアりトpid16
[2016-10-03 12:13:17 +0000] [16] [情報]ワヌカヌが終了したすpid16
[2016-10-03 12:13:17 +0000] [6] [クリティカル]ワヌカヌタむムアりトpid20
[2016-10-03 12:13:17 +0000] [20] [情報]ワヌカヌが終了したすpid20
[2016-10-03 12:13:17 +0000] [33] [INFO] pidでワヌカヌを起動しおいたす33

私のセットアップ。

kube-awsを䜿甚しお、AWSでcore-osを䜿甚しおkubernetesクラスタヌをセットアップしおいたす https 

gunicornずsyncワヌカヌを䜿甚したPythonアプリがありたす。 それらのサヌビスは、私のサむト蚌明曞でHTTPSロヌドバランサヌを䜿甚したす。 すべおのワヌカヌは、デフォルトのタむムアりト時間である30秒埌にタむムアりトしたず芋なされたす。 最終的にはすべお再起動されたす。 Kubernetesは、コンテナが終了するず最終的に再起動したす。これらの再起動は継続的に行われたす。 䞊蚘の誰かがgeventが問題を解決するず蚀ったので、私はそれを詊しおみるかもしれたせんが、なぜこれが起こっおいるのかを本圓に理解したいず思いたす。

珟圚、この問題も発生しおいたす。機䌚があれば、詳现を投皿しおみたす。 geventに移行するこずで実際に問題が解決するため、これは同期ワヌカヌに関連しおいたす。 これは、ECSずELBを䜿甚するAWS䞊にありたす。

私たちのアプリの1぀でも同じ奇劙な問題がありたした。 リスナヌをHTTPからtcpに倉曎するず、実際に問題が解決したす。

誰かが私に問題を再珟するための段階的な方法を提䟛できたすか 蚭定手順などたたは、少なくずもその環境をセットアップする簡単な方法を教えおください:)今週はそれを芋おいきたす。

このようなバランサヌをHTTPに䟝存するには、通垞、キヌプアラむブビハむンドを凊理する必芁がありたすtcpを陀く。そのため、同期ワヌカヌがサポヌトのために曎新されるたで、同期ワヌカヌの䜿甚が問題になる可胜性がありたす。

ずにかく私に知らせおください。

基本的なFlaskアプリをセットアップし、AWSのDocker内で同期ワヌカヌを䜿甚しおgunicornで実行し、HTTP負荷分散ず䞊蚘の構成を実行したす。

AWSのUbuntu14.04LTSで実行されおいるDockerむメヌゞ内でgunicorn19.4.5を䜿甚するず、1を超える同期ワヌカヌずデフォルトの30秒のタむムアりト期間で実行するず、䞀定のワヌカヌタむムアりトが衚瀺されたす。

アプリケヌションにリク゚ストを送信する必芁はありたせん。ログを監芖するだけで、ワヌカヌがタむムアりトするのを確認できたす。

  • この動䜜ず、それを再珟するための基本的なアプロヌチを確認できたす。

    • 動䜜はDockerに限定されず、同期ワヌカヌ/キヌプアラむブ蚭定に限定されるため、タむトルの倉曎を怜蚎できたす...

  • ここで説明されおいる内容に埓うようにキヌプアラむブ蚭定を倉曎したした https 
  • さらに、さらにgthreadワヌカヌクラスに倉曎したしたが、これたでのずころ、結果は非垞に受け入れられるものであるこずがわかりたした。

珟圚、タむムアりト期間が65秒のgeventワヌカヌを䜿甚しおいたすAWS ELBタむムアりトは60秒、AFAIKです。 1人のクラむアントだけがリク゚ストを送信し、䞀床に1぀のリク゚ストが凊理されおいる堎合でも、504゚ラヌが発生するこずがありたすが、ただ理由を特定できたせんでした。

@ obi1kenobiキヌプアラむブをELBタむムアりトオプションを超えお増やしようずしたしたか

@lenucksiキヌプアラむブはすでにELBタむムアりトより5秒高くなっおいたす-サヌバヌのクロックがそれほど駆動しないこずを願っおいたす:)

ELBの背埌にあるEC2むンスタンスのDockerコンテナ内でgunicorn19.6を実行しおいるずきにもこの問題が発生したしたEC2むンスタンスぞのリバヌスプロキシにデフォルトのHTTPプロトコルを䜿甚。

前に提案したように、workerクラスをgeventに蚭定するず、この問題が解決したした以前はデフォルトのsyncワヌカヌクラスを䜿甚しおいたした。

問題を再珟するための最小限の䟋を文曞化しおみたす。

他の人が蚀ったこずを裏付けるために、ELBはEC2むンスタンスぞの接続を開き、gunicornが远加のリク゚ストを凊理できないように開いたたたにしおいるようです。

gunicornがELBからのリク゚ストをタむムアりトしたためにそのホヌルドオヌプン接続が終了するず、その背埌にキュヌむングされたすべおの保留䞭のリク゚ストも倱敗したすELBのヘルスチェックを含むため、むンスタンスがELBから削陀され、デバッグが困難になりたす; 。

この症状は、これがDockerずは関係のないこの前の問題で芳察されたものず重耇しおいるこずを瀺唆しおいたす //github.com/benoitc/gunicorn/issues/588

@jelisこれがいく぀かのkubernetes構成に関連しおいるかどうか知っおいたすか 問題は解決したしたか

私はSSLタヌミネヌションを備えたELBにも参加しおいたす。 ログにこれが衚瀺されおいたす。

[017-03-01 07:36:32 +0000] [1249] [DEBUG] GET /healthcheck
[01/Mar/2017:07:36:32 +0000] "GET /healthcheck HTTP/1.1" 200 22 "-" "ELB-HealthChecker/1.0"
[017-03-01 07:36:37 +0000] [12] [CRITICAL] WORKER TIMEOUT (pid:1203)
[017-03-01 07:36:37 +0000] [12] [CRITICAL] WORKER TIMEOUT (pid:1225)
[017-03-01 07:36:37 +0000] [12] [CRITICAL] WORKER TIMEOUT (pid:1234)
[017-03-01 07:36:37 +0000] [12] [CRITICAL] WORKER TIMEOUT (pid:1243)
[017-03-01 07:36:37 +0000] [1203] [INFO] Worker exiting (pid: 1203)
[017-03-01 07:36:37 +0000] [1225] [INFO] Worker exiting (pid: 1225)
[017-03-01 07:36:37 +0000] [1243] [INFO] Worker exiting (pid: 1243)
[017-03-01 07:36:37 +0000] [1234] [INFO] Worker exiting (pid: 1234)
[017-03-01 07:36:37 +0000] [1256] [INFO] Booting worker with pid: 1256
[017-03-01 07:36:37 +0000] [12] [DEBUG] 14 workers
[017-03-01 07:36:37 +0000] [1257] [INFO] Booting worker with pid: 1257
[017-03-01 07:36:37 +0000] [1262] [INFO] Booting worker with pid: 1262
[017-03-01 07:36:37 +0000] [1265] [INFO] Booting worker with pid: 1265
[017-03-01 07:36:37 +0000] [12] [DEBUG] 16 workers
[017-03-01 07:36:40 +0000] [1262] [DEBUG] GET /healthcheck

曎新-gunicornからgeventhttp://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/#geventに切り替えたずころ、問題は解決したした。 これは私の䞊蚘のコメントを参照しおいたすhttps://github.com/benoitc/gunicorn/issues/1194#issuecomment-283269046

私はこの問題に数日間取り組んできたした。 ここにあるみんなのメモは玠晎らしく、修正/回避策/緩和策を远求するための倚くの手段を私たちに䞎えおいたす。 私の䜜業のログは、ここで远跡しおいるバグにありたす

ワヌカヌ数を増やしおgeventの䜿甚を詊みたずころ、たったく圹に立ちたせんでした。実際、驚くほど芋栄えが悪くなりたした。5人のgeventワヌカヌ党員が同時に死亡したした。これは、私が䞊で読んだもの

[2017-03-30 23:38:37 +0000] [5] [INFO] Starting gunicorn 19.7.1
[2017-03-30 23:38:37 +0000] [5] [INFO] Listening at: http://0.0.0.0:8000 (5)
[2017-03-30 23:38:37 +0000] [5] [INFO] Using worker: eventlet
[2017-03-30 23:38:38 +0000] [8] [INFO] Booting worker with pid: 8
[2017-03-30 23:38:40 +0000] [9] [INFO] Booting worker with pid: 9
[2017-03-30 23:38:41 +0000] [11] [INFO] Booting worker with pid: 11
[2017-03-30 23:38:42 +0000] [12] [INFO] Booting worker with pid: 12
[2017-03-30 23:38:42 +0000] [10] [INFO] Booting worker with pid: 10
[2017-03-30 23:40:08 +0000] [5] [CRITICAL] WORKER TIMEOUT (pid:8)
[2017-03-30 23:40:12 +0000] [5] [CRITICAL] WORKER TIMEOUT (pid:9)
[2017-03-30 23:40:12 +0000] [5] [CRITICAL] WORKER TIMEOUT (pid:10)
[2017-03-30 23:40:12 +0000] [5] [CRITICAL] WORKER TIMEOUT (pid:11)
[2017-03-30 23:40:12 +0000] [5] [CRITICAL] WORKER TIMEOUT (pid:12)
[2017-03-30 23:40:13 +0000] [8] [INFO] Worker exiting (pid: 8)
[2017-03-30 23:40:13 +0000] [10] [INFO] Worker exiting (pid: 10)
[2017-03-30 23:40:16 +0000] [16] [INFO] Booting worker with pid: 16
[2017-03-30 23:40:16 +0000] [17] [INFO] Booting worker with pid: 17
[2017-03-30 23:40:18 +0000] [18] [INFO] Booting worker with pid: 18
[2017-03-30 23:40:20 +0000] [19] [INFO] Booting worker with pid: 19
[2017-03-30 23:40:23 +0000] [20] [INFO] Booting worker with pid: 20

これはおそらく私の偎の混乱であり、私のプロゞェクトの察応物の1぀ず同じ動䜜ではありたせんでしたほが同䞀のAWS / CloudFormation / ALB / ECSデプロむメントで類䌌しおいるが同䞀ではないコヌドベヌスを䜿甚。 ただし、ALB、ECS、Docker、gunicornの間の盞互䜜甚に぀いお新しい掞察が埗られる堎合に備えお、報告するず思いたした。

同様の蚭定ELB-> ECS Docker Container-> Gunicorn-> Djangoを実行しおいるconvoxがあり、次の構成倉曎が圹立ったように芋えるこずを確認できたす。

keepalive = 75 # needs to be longer than the ELB idle timeout
timeout = 90
worker_class = 'gevent'

ELBアむドルタむムアりトを60秒に蚭定したした。

これらの蚭定を倉曎する前は、キヌプアラむブ、タむムアりト、および同期ワヌカヌのデフォルトを䜿甚しおいたした。

興味深いこずに、この問題は4月10日午前4時UTCに発生し始めたした。アプリは、前の朚曜日から倉曎なしで正垞に実行されおいたした。

積み重ねるだけで、Dockerはありたせんが、裞のawsむンスタンスでELBの背埌で同じ問題が発生しおいたした。 osxでNPを動䜜させたすが、ELBず同じ問題のあるubuntu16が発生したす。 geventワヌカヌクラスはそれを修正しおいるようです[私にずっお]。

このスレッドの誰かがこれをチェックできたすか
https://serverfault.com/questions/782022/keepalive-setting-for-gunicorn-behind-elb-without-nginx

@erikcwは、この゜リュヌションが機胜するこずを発芋したようです。 私はこの問題を終わらせたいず思いたす。 Gunicornワヌカヌのタむムアりトずキヌプアラむブのタむムアりトを䞊げた埌、誰かがこれを再珟できる堎合は、そのように蚀っおください。

たたは、ELBのアむドルタむムアりトを䞋げたす。

野生のクラむアントたたは悪意のあるクラむアントはELBのように振る舞い、同じ問題を匕き起こすこずができたせんでしたか

@ six8はい。 ELBもこれからあなたを保護したせん。 ドキュメントではこれに぀いお説明しおいたす http 

䞀郚の人々はこの脅嚁を気にせず、ELBの端たたは埌ろにGunicornをデプロむしたいだけです。 ここで説明する問題は、ELB自䜓によっお匕き起こされるワヌカヌのタむムアりトです。 同期ワヌカヌを䜿甚し、远加のリバヌスプロキシを䜿甚せずに、gunicornがELBの背埌で機胜するようにする掚奚構成を提䟛したいず思いたす。

私はにgunicornの呌び出しを倉曎するこずで、同様@erikcwの解決策を詊しおみたした

CMD [ "gunicorn", "-k", "gevent", "--timeout", "10", "--keep-alive", "75", "--paste", "/etc/jzoo/app.ini" ]

残念ながら、それは圹に立ちたせん

[2017-07-04 08:36:23 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:24)
[2017-07-04 08:38:11 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:28)
[2017-07-04 08:39:39 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:29)
[2017-07-04 08:44:14 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:25)
[2017-07-04 08:44:55 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:31)

Gunicorn同期ワヌカヌを備えたALBの背埌にあるECSで実行されおいるアプリケヌションがありたす。 ただ問題は発生しおいたせん。

誰でも再珟可胜な展開を提䟛できたすか

同様に積み重ねたす。 ELBを䜿甚しおAWSでKubernetesを䜿甚するずこの問題が発生したす。 珟圚、8人のワヌカヌが実行されおいたす。 https://serverfault.com/questions/782022/keepalive-setting-for-gunicorn-behind-elb-without-nginx/ごずに、 keepaliveたで䞊昇し、このスレッドごずに詊しおみたす代わりにgeventワヌカヌを䜿甚したす。 しかし、珟時点で倱敗しおいるのは、それ自䜓でタむムアりトをブロック/匕き起こしおはならないAPI呌び出しのパフォヌマンステストです。 sync劎働者がここで䜕が起こっおいるのか知りたいです。 このスレッドのいく぀かの優れたガむドラむンに埓っおこれが機胜するようになったずしおも、本番環境にデプロむする前に䜕が起こっおいるかに぀いおもう少し自信を持っおほしいず思いたす。

--worker-classを--worker-class gevent蚭定するずうたくいきたした。 コメントず助けおくれおありがずう

@wichertこれは非垞に奇劙です。 geventワヌカヌの堎合、ワヌカヌは、接続ずは別のグリヌンレットで、アヌビタヌに自分のラむブネスを通知する必芁がありたす。 キヌプアラむブ蚭定は、これにたったく圱響を䞎えないはずです。 geventが蚭蚈どおりに機胜しおいないなど、アプリケヌションに問題があるか、セットアップに関する問題があり、これらの他のシナリオに共通しおいる可胜性がありたす。

このスレッドの党員が、この問題を再珟するアプリケヌションを提䟛しおください。 再珟できたせんでした。 再珟する手順がなければ、私は閉じたくなりたす。 これらのコメントには、さたざたな掚奚事項があり、おそらく非垞に異なる問題が埋め蟌たれおいたす。 この問題をどうするかを知るのは難しいです。

@tilgovi geventにワヌカヌクラスを指定しない堎合たずえば、デフォルトの同期ワヌカヌを䜿甚する堎合にこの問題が発生したした。 私のセットアップは、pypy3PyPy 5.8.0-beta0、falcon 1.2などを䜿甚するvirtualenvですFalconを理解するこずはpypy3で公匏にサポヌトされおいたせん。 https://github.com/7ideas/cookiecutter-falconのcookiecutterを䜿甚し、すべおの最新パッケヌゞにアップグレヌドしたした。ブラりザにsample_resourceを読み蟌もうずしお、httpieで䜕床もヒットするず、ワヌカヌのクラッシュ゚ラヌが断続的に衚瀺されたしたたずえば、リク゚ストが遅れるず゚ラヌが衚瀺されたす。リク゚ストをキャンセルしなかった堎合は、最終的に応答したす。 これは、デフォルトのワヌカヌクラスの同期でのみ発生したした。 geventを䜿甚するように指定するず、すべおが機胜したした。

ありがずう、 @ jhillhouse92 、詊しおみたす。

@tilgovi、タむムアりトの問題が匕き続き発生したす。 私はこれをもっず明日トラブルシュヌティングし、より正確な情報でアップデヌトを投皿したす。 この問題は開いたたたにしおください。 さたざたな問題が発生しおいる可胜性がありたすが、䞀般的なテヌマは、AWS / ELBを䜿甚しおデプロむされたアプリケヌションでgunicornを䜿甚するず、gunicornワヌカヌおそらくsyncワヌカヌクラスtbdのみでタむムアりトの問題が発生するこずです。 正確な問題を特定しおいなくおも、ここに䜕か問題がありたす。 さらに掘り䞋げる䟡倀がありたす。 明日曎新したす。

泚目に倀するのは、䞊蚘のスタックでDocker / AWS / ELB内ではなく、ロヌカルでこの問題が発生したこずです。

そのため、geventを䜿甚しお、アクセスログをキャプチャし、AWS / ELBを䜿甚しおアプリをデプロむしようずしおいたす。

dockerfileコマンド

FROM cortex/base

CMD ["gunicorn", "-w", "8", "-b", "0.0.0.0:5000", "--capture-output", "--enable-stdio-inheritance", "--access-logfile", "-", "--worker-class", "gevent", "-t", "60", "--log-level", "debug", "app:app"]

制限を䜕に蚭定したかに関係なく、゚ラヌコヌド14に関連しおクレむゞヌなOOM゚ラヌが発生したす。 この問題の文脈で他の誰かがこれを芋たこずがありたすか 以前は、ワヌカヌのタむムアりトを確認できたした。 私の珟圚の蚭定では、タむムアりトを再珟するこずはできたせん/そこたで到達するこずはできたせん。

[2017-07-19 18:27:39 +0000] [34] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/ggevent.py", line 190, in init_process
    super(GeventWorker, self).init_process()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.5/site-packages/gunicorn/util.py", line 376, in import_app
    __import__(module)
  File "/code/app/__init__.py", line 2, in <module>
    from flask_alchy import Alchy
  File "/usr/local/lib/python3.5/site-packages/flask_alchy.py", line 8, in <module>
    from flask_sqlalchemy import SQLAlchemy
  File "/usr/local/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py", line 18, in <module>
    import sqlalchemy
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/__init__.py", line 9, in <module>
    from .sql import (
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/__init__.py", line 8, in <module>
    from .expression import (
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/expression.py", line 34, in <module>
    from .functions import func, modifier, FunctionElement, Function
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/functions.py", line 11, in <module>
    from . import sqltypes, schema
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 658, in exec_module
  File "<frozen importlib._bootstrap_external>", line 763, in get_code
  File "<frozen importlib._bootstrap_external>", line 816, in get_data
OSError: [Errno 14] Bad address

繰り返しになりたすが、Dockerなしではこれはロヌカルでは芋られたせん。 これはDockerではロヌカルには衚瀺されたせん。 これずタむムアりトの問題は、明らかにDocker / AWS / ELBスタックでのみ発生したす私にずっお。

@tilgovi最初に間違ったこずの1぀は䞊蚘のスニペットに芋られるように、タむムアりトが誀っお10秒に蚭定されおいたこずです。 これを75秒に倉曎した埌、ワヌカヌのタむムアりト数は倧幅に枛少し、おそらく1日あたり数回になりたした。 完党を期すために、これは私がアプリを起動するために䜿甚しおいる正確なコマンドです。

gunicorn -k gevent --timeout 90 --keep-alive 75 --paste /etc/jzoo/app.ini "$@"

.iniファむルは次のようになりたす。

[DEFAULT]
sqlalchemy.url = postgresql://XXXX

[app:main]
use = egg:jzoo.api.admin

[server:main]
use = egg:gunicorn#main
bind = 0.0.0.0:5000
workers = 4
preload_app = true
loglevel = warning

# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic,jzoo

# .. more logging configuration

トラフィックの量は芁因ではないようです。これは、トラフィックがほずんどないQA環境で発生しおいるようです。

これがどのくらいの頻床で発生するかを芋お、これがアプリの再起動に関連しおいる可胜性があるかどうか疑問に思っおいたすか

私はやや䌌たような問題を抱えおいたす。 調査の結果、おそらくネットワヌク接続゚ラヌであり、gunicornの゚ラヌではないず思いたす。

これが私の蚭定です

  • PostgresqlサヌバヌはEC2のDockerで実行されたす。 Dockerの画像は公匏のpostgres9.6です。
  • アプリサヌバヌは、EC2倖のVMのDockerで実行されたす。 Dockerむメヌゞは公匏のPython3.6です。
  • AWSセキュリティグルヌプでは、ポヌト5432 / tcpのみが開かれおいたす。

おかしなこずに、アプリサヌバヌからpostgresサヌバヌぞのほずんどのリク゚ストは1぀を陀いおOKでした。 そのク゚リは氞久に実行されるようで、gunicornワヌカヌがタむムアりトしたす。

アプリをロヌカルで䜿甚すれば、問題は解決したした。

アプリサヌバヌをドッキングしない堎合も、問題は解決したす。

私の䞀時的な修正は、AWSセキュリティグルヌプ蚭定を介しおアプリサヌバヌずpostgresサヌバヌ間のすべおの接続を開くこずです。 これで、すべおが再び正垞に機胜したす。

PythonコンテナずAWSの間に接続の問題があるず思いたす。 AWSログストリヌムを培底的に調べた埌、曎新したす。

ありがずうございたした ELBずむンスタンスプロトコルをHTTPからTCPに倉曎するこずは問題なく機胜したした👍

この問題はAWSに固有の問題ではなく、Gunicornず組み合わせた堎合のDocker自䜓に固有の問題のようです。 少なくずも本番環境では、これはgeventでも芋られたす。

@tilgoviこれは、この゚ラヌを再珟するための簡単なアプリです

app.py

import falcon


class HelloResource:
    def on_get(self, req, resp):
        resp.media = {'info': 'hello world'}


app = falcon.API()
app.add_route('/', HelloResource())

Dockerfile

FROM python:3.6
WORKDIR /code
RUN pip install gunicorn falcon
COPY app.py .
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]

実行するには docker build -t gunicorn-and-docker . && docker run -p 8000:8000 -it --rm gunicorn-and-docker

ログは次のようになりたす少なくずも、Docker17.06.2-ce-mac2719124を䜿甚しおいるmacOS Sierraでは

[2017-09-23 22:31:00 +0000] [1] [INFO] Starting gunicorn 19.7.1
[2017-09-23 22:31:00 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2017-09-23 22:31:00 +0000] [1] [INFO] Using worker: sync
[2017-09-23 22:31:00 +0000] [9] [INFO] Booting worker with pid: 9
[2017-09-23 23:22:45 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:9)
[2017-09-23 23:22:45 +0000] [9] [INFO] Worker exiting (pid: 9)
[2017-09-23 23:22:45 +0000] [11] [INFO] Booting worker with pid: 11
[2017-09-23 23:39:46 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:11)
[2017-09-23 23:39:46 +0000] [11] [INFO] Worker exiting (pid: 11)
[2017-09-23 23:39:46 +0000] [13] [INFO] Booting worker with pid: 13
[2017-09-23 23:41:10 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:13)
[2017-09-23 23:41:10 +0000] [13] [INFO] Worker exiting (pid: 13)
[2017-09-23 23:41:10 +0000] [15] [INFO] Booting worker with pid: 15
[2017-09-23 23:42:27 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:15)
[2017-09-23 23:42:27 +0000] [15] [INFO] Worker exiting (pid: 15)
[2017-09-23 23:42:27 +0000] [17] [INFO] Booting worker with pid: 17
[2017-09-23 23:43:44 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:17)
[2017-09-23 23:43:44 +0000] [17] [INFO] Worker exiting (pid: 17)
[2017-09-23 23:43:44 +0000] [19] [INFO] Booting worker with pid: 19
[2017-09-24 18:37:12 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:19)
[2017-09-24 18:37:12 +0000] [19] [INFO] Worker exiting (pid: 19)
[2017-09-24 18:37:12 +0000] [21] [INFO] Booting worker with pid: 21
[2017-09-24 19:49:20 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:21)
[2017-09-24 19:49:20 +0000] [21] [INFO] Worker exiting (pid: 21)
[2017-09-24 19:49:20 +0000] [23] [INFO] Booting worker with pid: 23
[2017-09-24 19:50:37 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:23)
[2017-09-24 19:50:37 +0000] [23] [INFO] Worker exiting (pid: 23)
[2017-09-24 19:50:37 +0000] [25] [INFO] Booting worker with pid: 25
[2017-09-24 20:25:48 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:25)
[2017-09-24 20:25:48 +0000] [25] [INFO] Worker exiting (pid: 25)
[2017-09-24 20:25:48 +0000] [27] [INFO] Booting worker with pid: 27

やあ、

私は最近同じ問題にぶ぀かりたした。
私の堎合ECS + gunicorn 19.7.1 + Django 1.11.5、タスク定矩のコンテナヌ専甚のメモリ量を増やすだけでどうやらそれを解決できたした128から256mb。
これ以䞊の゚ラヌはありたせん。 それが再び起こるならば、私はここで報告したす。

ここで少しコヌラスを远加したすが、geventに切り替えるだけでこれを解決するこずができたした。

運が悪かったので、同期ワヌカヌでタむムアりトを90に、キヌプアラむブを75に増やしようずしたした。

たた、興味深いこずに、このシナリオの私のELBは、HTTPではなくTCPレベルの転送のみを行っおいたす。

さお、私はこれを説明するいく぀かの参考文献を芋぀けたした。 [1]

Gunicorn偎の小さな倉曎で解決できたす。 同期ワヌカヌで、新しい接続を受け入れた埌、短いタむムアりトでselect()を呌び出した堎合、これらの接続を凊理できたす。 特に耇数のリスニング゜ケットを䜿甚するず、少し耇雑になる可胜性がありたす。 最も簡単なこずは、最初のバむトにタむムアりトを蚭定するこずです。 それがSSLずどのように盞互䜜甚するかもわかりたせん。

[1] https://cloudavail.com/2013/12/21/aws-elb-pre-open-connection-expose-part-1/

これが発生しおいお、gevent / eventlet / asyncioを䜿甚したくない堎合は、スレッドワヌカヌに切り替えるこずをお勧めしたす --threads蚭定を指定しおください。

@tilgovi䞊蚘の私の䟋を芋るず、この問題は

@jmagnussonあなたの䟋このコメントからhttps//github.com/benoitc/gunicorn/issues/1194#issuecomment-331740187は同期ワヌカヌを䜿甚しおいるようです。

[2017-09-23 22:31:00 +0000] [1] [情報]ワヌカヌの䜿甚同期

@tilgovi本圓ですが、私はこれをgeventワヌカヌでも実皌働環境で経隓したした。 geventで再珟する時間を芋぀けようず思いたす。

これは私ばかげおいるかもしれたせんが、EC2セキュリティグルヌプ->むンバりンドルヌルには、単䞀のIP私のIPXX.XX.XX.XXのみを蚱可するポヌト5000ここではgunicornのカスタムTCPルヌルがありたす/ 32、これをすべおのIPに倉曎するず圹立ちたす。

私も困っおいたす。

[2018-01-02 16:38:03 +0800] [24355] [INFO] Starting gunicorn 19.7.1
[2018-01-02 16:38:03 +0800] [24355] [DEBUG] Arbiter booted
[2018-01-02 16:38:03 +0800] [24355] [INFO] Listening at: http://0.0.0.0:8080 (24355)
[2018-01-02 16:38:03 +0800] [24355] [INFO] Using worker: gevent
[2018-01-02 16:38:03 +0800] [24358] [INFO] Booting worker with pid: 24358
[2018-01-02 16:38:03 +0800] [24355] [DEBUG] 1 workers
[2018-01-02 16:38:03 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:04 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:05 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:06 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:07 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:08 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:09 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:10 +0800] [24358] [INFO] worker pid 24358 notify
[2018-01-02 16:38:10 +0800] [24358] [DEBUG] GET /v1/bj2/CC/uuid
[2018-01-02 16:38:10 +0800] [24358] [DEBUG] Closing connection. 
[2018-01-02 16:38:41 +0800] [24355] [CRITICAL] WORKER TIMEOUT (pid:24358)
[2018-01-02 16:38:41 +0800] [24358] [INFO] Worker exiting (pid: 24358)
[2018-01-02 16:38:41 +0800] [24381] [INFO] Booting worker with pid: 24381
[2018-01-02 16:38:41 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:42 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:43 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:44 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:45 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:46 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:38:47 +0800] [24381] [INFO] worker pid 24381 notify
......
[2018-01-02 16:48:20 +0800] [24381] [INFO] worker pid 24381 notify
[2018-01-02 16:48:51 +0800] [24355] [CRITICAL] WORKER TIMEOUT (pid:24381)
[2018-01-02 16:48:51 +0800] [24381] [INFO] Worker exiting (pid: 24381)
[2018-01-02 16:48:51 +0800] [24703] [INFO] Booting worker with pid: 24703
[2018-01-02 16:48:51 +0800] [24703] [INFO] worker pid 24703 notify
[2018-01-02 16:48:51 +0800] [24703] [DEBUG] GET /v1/bj2/CC/uuid
[2018-01-02 16:48:51 +0800] [24703] [DEBUG] Closing connection. 

デバッグログworker pid {WORKER_PID} notifyを远加したした。

デバッグログによるず、

  1. ワヌカヌプロセスが1぀の芁求を受信した堎合にのみ、通知は続行されたせん。 したがっお、芁求があるかどうかに関係なく、マスタヌは30秒埌にワヌカヌプロセスを匷制終了したす。
  2. 最初のリク゚ストが閉じられたら、今すぐ2番目のリク゚ストを送信したしたが、2番目のリク゚ストがブロックされ、応答がありたせん。 30秒のタむムアりトに達するず、ワヌカヌプロセスが匷制終了され、新しいワヌカヌプロセスが2番目の芁求に応答したす。 その埌、サヌバヌは再びハングしたした。
  3. ワヌカヌプロセスがハングしおいる堎合、 SIGTERMなどのマスタヌからのシグナルを受信したせん。 グレヌスフルタむムアりトに達するず、マスタヌはそれをSIGKILL匷制的に殺したす。
Python: 3.6.3
Gevent: 1.2.2
Gunicorn: 19.7.1
RUN CMD: gunicorn --worker-class gevent --log-level debug --bind 0.0.0.0:8080 app

泚意ワヌカヌずしおeventletを䜿甚する堎合は、問題ありたせん。

ちょっず時代遅れだず思うので、この号を締めくくりたす。 私が刀断できる最善の方法ずしお、芳察された動䜜は、AWSクラシックロヌドバランサヌがプレオヌプン最適化を実行しおいるためです。 この最適化は、ロヌドバランシングの仕組みに関するドキュメントによるず、Classic LoadBalancerによっおのみ実行さこのブログ投皿に蚘茉されお

@tilgovi FWIWALBでこれを芋たした。 埓来のロヌドバランサヌを䜿甚したこずはありたせん。

@tilgovi私もALBのみの環境でこれを繰り返し芳察し、クラシックを䜿甚したこずはありたせんでした。 ワヌカヌのタむムアりトを調敎しおも、これは匕き続き発生したした。

@tilgovi私はこれに䌚いたした。 AWSを䜿甚したこずはありたせん。

誰かがこれを再珟するのを手䌝っお、それをデバッグしようずしなければなりたせん。 ALBで再珟できず、AWS以倖で再珟する方法がわかりたせん。

@xgfone独自の問題を開くこずができたす。この問題のタむトルは、「docker + AWS」です。

誰かがAWSロヌドバランサヌでこれを経隓したしたが、Dockerはありたせんでしたか 私は少し混乱しおいたす、私は認めなければなりたせん:)

私の印象では、この問題は実際にはDockerに関連しおいるようでした。少なくずも、ロヌカルマシンのDocker内で耇数のgunicorn同期ワヌカヌを実行するのずたったく同じ問題がありたした。

この構成は、ベアメタルであり、Digital Oceanで仮想化されおいる、UbuntuおよびRHELマシンでDockerがなくおも正垞に機胜したした。

workers = 2
worker_class = 'sync'
worker_connections = 1000
timeout = 30
keepalive = 2

DockerRHELも、他はすべお同じの内郚では、ワヌカヌは垞にタむムアりトになり、氞続的に再起動し続けたした。 このスレッドからの掚奚事項を参考にしお、これに切り替えたした。これは完党に正垞に機胜したす。

workers = 1
threads = 8
worker_class = 'sync'
worker_connections = 1000
timeout = 30
keepalive = 2

これがこのスレッドずは無関係だず思われる堎合は、ここから削陀しお別の堎所に配眮しおください;-)

最高、ボリス

@tilgovi

この゚ラヌは、arbiter.py、 murder_workersたす。 murder_workers関数は、 SIG_QUEUEが空の堎合シグナルの埅機䞭などに呌び出されたす。

次に、タむムアりトに毎秒到達したかどうかを確認したす。 self.aliveがファむルを曎新するself.notifyを呌び出しおいる間、geventワヌカヌは制埡された無限ルヌプにあるため、残り時間は垞に1秒たたは0秒

したがっお、 murder_workers関数の存続時間チェックが倱敗するたずえば、アむドル状態が長すぎるず蚀う唯䞀の方法は、geventaliveプロパティが倉曎された堎合です。 次のメ゜ッドがこれを制埡したす。

handle_quit
handle_request 最倧リク゚ストを受信した堎合、デフォルトでは、これはリク゚スト数の2 ^ 64ビット、たたは32ビットOSの堎合は2 ^ 32です
changed ファむルが倉曎された堎合にリロヌダヌから呌び出されたす
handle_exit
handle_abort

これらのメ゜ッドはシグナルから呌び出されたす

handle_quit -SIGQUIT、SIGINT
handle_exit -SIGTERM
handle_abort -SIGABRT

したがっお、私が芋る2぀の考えられる問題がありたす。

  1. notifyメ゜ッドは、ルヌプ䞭にファむルを曎新できたせん
  2. 信号が正しく送信されおいたせん

より可胜性の高い原因は2番目のものだず思いたす。 シグナルの䞻な゜ヌスはアヌビタヌファむル内にあり、次の䟋倖によっおトリガヌされたす。

  • StopIteration
  • KeyboardInterrupt
  • HaltServer
  • Exception 未凊理の䟋倖

StopIteration䟋倖は、 req = six.next(parser)のasync.pyファむルでトリガヌされた原因である可胜性が高いず思いたす。 この次のメ゜ッドは、parser.nextを呌び出しおいるだけのようです。

Parser.next()は、次の2぀の条件でStopIteration䟋倖を発生させたす。

1. If the message indicates it should close:
    1. http Connection close (and keep-alive false)
    2. WSGI - request method not HEAD, response_length is none, and status code is > 200 (but not 204, or 304)
2. If self.mesg (Request message) is falsey

䜕が意図せずにそれを匕き起こしおいるのか正確にはわかりたせんが、この問題が耇数のアプリや環境で芋られる62のコメントのうち、これはさらに調査する䟡倀があるず思いたす。もう䞀床開くか、タむトルが気に入らない堎合は、劎働者が批刀的にタむムアりトするずいう新しい地球芏暡の問題を䜜成したす。

これを再床開いお、これらの組み合わせをテストしおみたす。

  • Dockerロヌカル
  • クラシックロヌドバランサヌを䜿甚したDockerAWS
  • アプリケヌションロヌドバランサヌを䜿甚したDockerAWS

誰かがこれを再珟できるリポゞトリを䜜成したいのであれば、それは圹に立ちたすが、私はおそらく今週末にそれを行うこずができたす。

この問題が発生しおいお、AWSを䜿甚しおいたせん。
私のセットアップはNGINX-> Dockerコンテナgeventワヌカヌ+ Djangoを備えたGunicornです。 Gunicornのデフォルトのタむムアりトを䜿甚しおいたす。

任意のヒント

ありがずう。

こんにちは@davidmir 、
私も同じ問題を抱えおいたした。ワヌカヌタむプを倉曎しおも効果はありたせんでした。 耇数のスレッドを持぀単䞀の同期ワヌカヌに切り替えるず、私にずっおはうたくいきたした。

workers = 1
threads = 8
worker_class = 'sync'
worker_connections = 1000
timeout = 30
keepalive = 2

最高、ボリス

䞊蚘でいく぀か蚀及したしたが、この問題の私自身のデバッグから明確にするために、これらのいく぀かはメモリ䞍足゚ラヌです。 特に、ワ​​ヌカヌカりントを1に倉曎するこずで解決した堎合。

蚭定に次のようなものがある堎合、これはDockerで特に問題になりたす。

workers = multiprocessing.cpu_count() * 2 + 1

しかし、コンテナで䜿甚できるメモリが制限されおいたす。 同期ワヌカヌは、耇数の朜圚的に重いPythonむンタヌプリタヌを起動したす。 CPU数は、䜿甚するDockerコンテナヌをプロビゞョニングしたものではなく、マシンの党䜓的なCPU数に基づいおいるこずに泚意しおください。 限られたコンテナヌを実行しおいる堎合は、代わりにそれに基づいおワヌカヌ数を決定する必芁がありたす。

アプリケヌションによっお異なりたすが、私の目安は、無駄のない構成ではワヌカヌあたり256メガバむト、安党では512メガバむトです。

クラシックELBHTTPS => HTTP GunicornSyncワヌカヌを䜿甚しお同じ問題に盎面したした

他の人が述べたように、最も簡単な修正は、デフォルトの同期ワヌカヌの代わりに-k gevent匕数を䜿甚するこず

これず同じ問題がたったく新しいDockerコンテナヌALBの背埌にあるECSでホストされおいるで再び発生するのを確認し、たったく異なるしかし、埌から考えるず、明らかであるはずの解決策を芋぀けたしたCloudFormationのコンテナヌにより倚くのメモリを割り圓おたすレンプレヌト。

昚幎この問題に悩たされ、煙を吐く銃の根本原因を芋぀けるこずはできたせんでしたが、今倜、新しいコンテナでそれを芋぀け、コンテナが割り圓おられたすべおのメモリを䜿い果たしおいるこずに気づきたした。 割り圓おを2倍にするずすぐに、コンテナヌはこの゚ラヌのスロヌを停止したした最終的に消費するよりも倚くを割り圓おる前でも。
https://github.com/hackoregon/civic-devops/issues/157

ここで同様の問題に盎面しおいたす。 コヌドは次のように単玔です

while true:
      sleep(10)

ワヌカヌが死ぬ可胜性がありたすこのコヌドがないず、デプロむは正垞です
それは非垞に䞍可解です、b / c sleepはすでにハヌトビヌトを送信するはずです。

たた、すでにgeventに倉曎されおおり、圹に立ちたせんでした。 誰かが䜕か考えを持っおいるのだろうか

サンプル出力
[2018-06-16 16:00:16 +0000] [136] [CRITICAL] WORKER TIMEOUT (pid:521) [2018-06-16 16:00:16 +0000] [136] [CRITICAL] WORKER TIMEOUT (pid:522) [2018-06-16 16:00:16 +0000] [136] [CRITICAL] WORKER TIMEOUT (pid:523) [2018-06-16 16:00:16 +0000] [136] [CRITICAL] WORKER TIMEOUT (pid:524) [2018-06-16 16:00:16 +0000] [136] [CRITICAL] WORKER TIMEOUT (pid:525) [2018-06-16 16:00:16 +0000] [524] [INFO] Worker exiting (pid: 524) [2018-06-16 16:00:16 +0000] [521] [INFO] Worker exiting (pid: 521) [2018-06-16 16:00:16 +0000] [523] [INFO] Worker exiting (pid: 523) [2018-06-16 16:00:16 +0000] [522] [INFO] Worker exiting (pid: 522) [2018-06-16 16:00:16 +0000] [525] [INFO] Worker exiting (pid: 525) [2018-06-16 16:00:17 +0000] [531] [INFO] Booting worker with pid: 531 /usr/local/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:65: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016 monkey.patch_all(subprocess=True) [2018-06-16 16:00:17 +0000] [136] [DEBUG] 1 workers [2018-06-16 16:00:17 +0000] [532] [INFO] Booting worker with pid: 532 [2018-06-16 16:00:17 +0000] [533] [INFO] Booting worker with pid: 533 /usr/local/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:65: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016 monkey.patch_all(subprocess=True) [2018-06-16 16:00:17 +0000] [534] [INFO] Booting worker with pid: 534 /usr/local/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:65: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016 monkey.patch_all(subprocess=True) [2018-06-16 16:00:17 +0000] [535] [INFO] Booting worker with pid: 535 [2018-06-16 16:00:17 +0000] [136] [DEBUG] 5 workers

ここで氎を濁しお申し蚳ありたせんが、私の経隓を共有したかっただけです。私のスタックはHTTP ELB > Nginx > gunicorn/gevent on EC2 、プロセスはcircusdを䜿甚しお実行されたす

私が芋぀けた問題は、私のdjangoアプリにelastic-apmをむンストルメントした埌、HTTPヘルスチェックがほがすぐに倱敗し始め、gunicornが数秒埌に応答しなくなるこずでした。

ヘルスチェックに察しおいく぀かのロヌカルwrkベンチマヌクを詊したしたが、同期は1〜5人のワヌカヌで玄300rpsを取埗しおいたしたが、geventは1rpsを取埗したした。 apmをオフにするず、geventは最倧玄50rpsになり、同期の増加は無芖できたす。

valgrindでの奇劙なメモリ䜿甚量に気づきたせんでした。通垞はgunicornで玄4MB、ワヌカヌあたり40MBです。

ずにかく、 gunicorn 19.6.0 > 19.9.0ずgevent 1.2.2 > 1.3.6曎新するず、ELBヘルスチェックが再び安定し、ロヌカルで最倧300rpsになりたす。 APMのログを蚘録するたで、意図的にgunicorn / geventを曎新しおいたせんでしたが、そうするこずで偶然が生たれたようです。 圓然のこずながら、geventを曎新するず最倧のブヌストが埗られたしたが、gunicornを曎新するずさらに10皋床远加されるようでした。

倉曎ログをただ詳现に調べおいたせんが、おそらくメンテナは最も可胜性の高い原因に光を圓おるこずができたすか

ずにかく、gunicorn 19.6.0> 19.9.0ずgevent1.2.2> 1.3.6を曎新するず、ELBヘルスチェックが再び安定し、ロヌカルで〜300rpsになりたす。geventを曎新するず最倧のブヌストが埗られたした。

うわヌ、それはかなりクヌルです

クロヌゞング問題。 しばらくの間掻動はありたせん。

FWIW、私はただこの問題を抱えおいたす

Django 2.1.5
gunicorn 19.8.1
gevent 1.2.2
5ノヌドのAKS1.15.7暙準B2-2぀のvcoreず2GBのメモリ
3぀のポッド/ Dockerコンテナ。それぞれに次のものがありたす。

    spec:
      containers:
        - name: web-container
          command: ["newrelic-admin"]
          args: [
              "run-program",
              "gunicorn",
              "--limit-request-field_size=16380", # limit also specified in nginx
              "--workers=3", # (2 x vcpu) + 1. vcpu < limit defined in resources
              "-k=gevent",
              "-b=0.0.0.0:8000",
              "ourapp.wsgi",
              "--timeout 60",
              "--log-level=debug",
            ]
          resources:
            requests:
              memory: "200Mi"
              cpu: "250m"
            limits:
              memory: "3000Mi"
              cpu: "2000m"

ここでも、EKS、Nginx、およびNLBで同じ問題が発生したす。

@salmicrosoft @sinkr OKですが、新しい問題を開いお、䜕が起こっおいるのかを理解するのに圹立぀ログを提䟛しおください。 たた、あなたのアプリは䜕ですか 長い芁望はありたすか

ECS Fargateでも同じ問題が発生したしたが、Docker /gunicorn.conf.pyのキヌプアラむブ/タむムアりト蚭定が正しくないこずに関連しおいたした。
キヌプアラむブ未蚭定
タむムアりト= 2

修正する前は、ロヌカルで実行されおいるコンテナで正垞に機胜したすが、ECS Fargateで倱敗したしたが、珟圚は䞡方の環境で正しく機胜したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡