Gunicorn: рдбреЙрдХрд░ + рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ . рдкрд░ рдЧрдирд┐рдХреЛрд░реНрди рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдЯрд╛рдЗрдо рдЖрдЙрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЬрдире░ 2016  ┬╖  78рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдПрдХ рдбреЙрдХ рдЗрдореЗрдЬ рдХреЗ рдЕрдВрджрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.4.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдЙрдмрдВрдЯреВ 14.04 рдПрд▓рдЯреАрдПрд╕ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ> 1 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ 30 рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╕рдордп рдирд┐рд░рдВрддрд░ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ #588 рдпрд╛ #942 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрд╛ред

рдХрдИ рд░рдиреЛрдВ рдкрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдЬрдиреНрдп рд╕рд╛рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрди -1 рд╢реЗрд╖ рдХрд░реНрдордЪрд╛рд░реА рд╣реИрдВ рдЬреЛ рдЕрд╕рдлрд▓ рд╣реЛрддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреЛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдордЬрдмреВрдд рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рди рд▓реЗрдВред

рдпрд╣рд╛рдБ рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА:

  • рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдбреЙрдХрд░ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрддреА рд╣реИрдВ, рдпрд╛ рдПрдХ рд╣реА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд▓реЗрдХрд┐рди AWS рдкрд░ рдирд╣реАрдВ?
    рдирд╣реАрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдбреЛрдХрд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
  • рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рдореЗрдВ>30s рд▓рдЧрддреЗ рд╣реИрдВ?
    рдирд╣реАрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди 1 рд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдЖрд░рдВрдн рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред
  • рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╡рд╣ рд╣реИрдВрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
    рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рдореБрджреНрджрд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ред
  • рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рддреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ?
    рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (> 1 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде) рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрдИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рдеред рдпрд╣ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧреЗрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЧрдирд┐рдХреЛрд░реНрди рдкрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪрд▓рддрд╛ рд╣реИред
  • рдХреНрдпрд╛ рдбреЙрдХрд░ рдХрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ?
    рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд▓реЙрдЧ рджреЗрдЦреЗрдВ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ctime рдЖрдорддреМрд░ рдкрд░ рдареАрдХ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред рдбреЙрдХрд░ рдХрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣рдЯрд╛рдИ рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ stat -L рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рдлрд╛рдЗрд▓ рдХреЛ рдЕрдирд▓рд┐рдВрдХ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк stat -L рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ ctime рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХ рдкрд░ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдордп рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП workertmp.py рдХреБрдЫ рдХреЛрдб рдЬреЛрдбрд╝рд╛, рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдРрд╕рд╛ рд▓реЙрдЧ рд╣реИ (рд╕рднреА рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░рд▓реАрд╡реНрдб):

[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 рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рд╕рдордп рдХрднреА рдирд╣реАрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛

рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рдЗрд╕рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдБ!

рдореИрдВ рдЗрд╕ рдмрдЧ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ (рд▓реЛрдЪрджрд╛рд░ рдмреАрдирд╕реНрдЯреЙрдХ + рдИрд╕реА 2 рдХрдВрдЯреЗрдирд░ рд╕реЗрд╡рд╛) рдкрд░ рдПрдХ рдбреЛрдХрд░ рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ gunicorn рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБред
рдирд┐рд░рдВрддрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдмрд╛рдж рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдбреЙрдХрд░ рдЫрд╡рд┐ рдЪрд▓рд╛рддреЗ рд╕рдордпред
рдПрдХ рд╣реА HTTP рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрднреА-рдХрднреА рдХреБрдЫ ms, рдХрднреА-рдХрднреА 20-30 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреИрд░-рдкреНрд░рдорд╛рдгрд┐рдд "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" -рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреГрд╖реНрда рдпрд╛ рдПрдХ рдкреГрд╖реНрда рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг :

  • Gunicorn рд╕рдВрд╕реНрдХрд░рдг : 19.5.0 рдФрд░ 19.6.0ред
  • рдмреЗрд╕ рдбреЙрдХрд░ рдЫрд╡рд┐ : рдкрд╛рдпрдерди: 3.4 ( рдУрдПрд╕ : рдбреЗрдмрд┐рдпрди рдЬреЗрд╕реА)
  • рдбреЙрдХрд░ рд╕рдВрд╕реНрдХрд░рдг : 1.9.1 (рдЕрдореЗрдЬрд╝реЕрди рдИрд╕реАрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд), рдУрдПрд╕ : рдЕрдореЗрдЬрд╝реЕрди рд▓рд┐рдирдХреНрд╕ рдПрдПрдордЖрдИ 2016.03 (рдЕрдореЗрдЬрд╝реЕрди рдИрдмреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд)ред
  • рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдврд╛рдВрдЪрд╛ : Django рд╕рдВрд╕реНрдХрд░рдг 1.9.6 рдФрд░ 1.9.7ред

рдкрд░рд┐рд╡реЗрд╢ _рдирд╣реАрдВ_рдкреНрд░рднрд╛рд╡рд┐рдд :

  • рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди , рджреЛрдиреЛрдВ _inside_ рдФрд░ _outside_ рдПрдХ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ред рдУрдПрд╕ : рдЙрдмрдВрдЯреВ 16.04 рдПрд▓рдЯреАрдПрд╕, рдбреЙрдХрд░ : 1.11.2ред
  • рд╣реЗрд░реЛрдХреВ ( рдУрдПрд╕ : рдЙрдмрдВрдЯреВ 14.04 рдПрд▓рдЯреАрдПрд╕)

рдЕрдореЗрдЬрд╝рди рдХрдВрдЯреЗрдирд░ рд▓реЙрдЧ :

[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)
(...)

`

рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдпрд╣ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░рд╛ рд╕рдВрджреЗрд╣ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╣реИред рд╣рдо рдкрд┐рдЫрд▓реА рдХрдВрдкрдиреА рдореЗрдВ paste рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ рдФрд░ рдпрд╣ ELB рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ paste рдореЗрдВ рд╣рд┐рдЪрдХреА рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рдЕрдм рдПрдХ рдирдИ рдиреМрдХрд░реА рдореЗрдВ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рддрдХ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдИрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рд░рдЦрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рд╕рдм рдХреБрдЫ рдареАрдХ рдерд╛, рд╡реЗрдмрдПрдк рдЕрдм рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдЕрдиреБрддреНрддрд░рджрд╛рдпреА рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд▓рдЯрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп gevent рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЗрд╕рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

рддреЛ рдХреНрдпрд╛ рдпрд╣ рдИрдПрд▓рдмреА рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЬреАрд╡рд┐рдд рд░рдЦрдиреЗ рдФрд░ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИ? рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/sync.py#L168

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЬрд╛рди-рдмреВрдЭрдХрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рдереЗред рдЕрдЧрд░ рдХреЛрдИ client.close() рдХреЙрд▓ рдХреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░реАрдХреНрд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ: https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/sync.py#L199

рдЖрдк рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдИрдПрд▓рдмреА рдкрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдХрдо рд╣реИ, рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рд╡реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рднреА рд╣реИ: http://docs.aws.amazon.com/elasticloadbalancing/latest/ Classic/config-idle-timeout.html

@tilgovi рдПрд▓реНрдм рдЪреАрдЬ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдП) рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЧрдирд┐рдХреЛрд░реНрди рдИрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмреА) рд╕рдорд╕реНрдпрд╛ gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрдп рдХреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░, рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ ..

рдпрд╣ рдХреЗрд╡рд▓ ELB рдХреЗ рдкреАрдЫреЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ HTTP рдпрд╛ HTTPS ELB рдкрд░ рд╕реЗрдЯ рд╣реИред
рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЯреАрд╕реАрдкреА рдпрд╛ рдПрд╕рдПрд╕рдПрд▓ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рднреА рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВрдиреЗ рдЕрдм рддрдХ рд╡рд░реНрдгрд┐рдд рдлрд┐рдХреНрд╕ (HTTP рдХреЗ рдмрдЬрд╛рдп рдЯреАрд╕реАрдкреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рдореИрдВ рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХреНрд╕-рдлреЙрд░рд╡рд░реНрдбреЗрдб-рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдИрдПрд▓рдмреА рдкрд░ HTTP/HTTPS рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реИ :)

рдЕрдЬреАрдм, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдИрдПрд▓рдмреА рдореЗрдВ HTTP/HTTPS рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╣реЛрддрд╛ рд╣реИ? рдФрд░ рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ?

@ecs рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ HTTP/HTTPS рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрд╕реА рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░рдХ рд╣реИрдВ (рдЧрдирд┐рдХреЙрд░реНрди рд╕рдВрд╕реНрдХрд░рдг, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ, рдбреЙрдХрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдирд╣реАрдВ, рдИрдПрд▓рдмреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдЧрд╛ рдХрд┐ рдИрдПрд▓рдмреА рдкрд░ рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ HTTP рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрдмрдВрдЯреВ 14.04 рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рд╕рдВрд╕реНрдХрд░рдг 19.3.0 рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдбреЙрдХрдЯрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
[реирежрезрем-резреж-режрей резреи:резрей:резрен +режрежрежреж] [рем] [рдорд╣рддреНрд╡рдкреВрд░реНрдг] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд (рдкреАрдЖрдИрдбреА:резрем)
[реирежрезрем-резреж-режрей резреи:резрей:резрен +режрежрежреж] [резрем] [рд╕реВрдЪрдирд╛] рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдкреАрдЖрдИрдбреА: резрем)
[реирежрезрем-резреж-режрей резреи:резрей:резрен +режрежрежреж] [рем] [рдорд╣рддреНрд╡рдкреВрд░реНрдг] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд (рдкреАрдЖрдИрдбреА:реиреж)
[реирежрезрем-резреж-режрей резреи:резрей:резрен +режрежрежреж] [реиреж] [рд╕реВрдЪрдирд╛] рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдкреАрдЖрдИрдбреА: реиреж)
[реирежрезрем-резреж-режрей резреи:резрей:резрен +режрежрежреж] [рейрей] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: рейрей

рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдкред

рдореИрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдХреЛрд░-рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдм-рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/coreos/coreos-kubernetes/tree/master/multi-node/aws

рдореЗрд░реЗ рдкрд╛рд╕ рдЧрдирд┐рдХреЛрд░реНрди рдФрд░ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдЬрдЧрд░ рдРрдк рд╣реИред рдЙрдирдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдореЗрд░реЗ рд╕рд╛рдЗрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ HTTPS рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 30 рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдордп рдХреЗ рдмрд╛рдж рд╕рднреА рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдЯрд╛рдЗрдо рдЖрдЙрдЯ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдЕрдВрддрддрдГ рд╕рднреА рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░ рд░рд╣реЗ рд╣реИрдВред Kubernetes рдЕрдВрддрддрдГ рдХрдВрдЯреЗрдирд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ.. рдпреЗ рдкреБрдирд░рд╛рд░рдВрдн рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреЗ рд░рд╣рддреЗ рд╣реИрдВред рдКрдкрд░ рдХрд┐рд╕реА рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЧреАрд╡реЗрдВрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рдкрд░ рдореИрдВ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреАрд╡реЗрдВрдЯ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдИрд╕реАрдПрд╕ рдФрд░ рдИрдПрд▓рдмреА рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рд╣реИред

рд╣рдорд╛рд░реЗ рдПрдХ рдРрдк рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдЕрдЬреАрдм рд╕рдорд╕реНрдпрд╛ рдереАред рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ HTTP рд╕реЗ tcp рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдХреЛрдИ рднреА рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ? (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдг рдФрд░ рдРрд╕реЗ) рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ :) рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдЧрд╛ред

рдРрд╕реЗ рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП HTTP рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рддреМрд░ рдкрд░ рдХреАрдк-рдЕрд▓рд╛рдЗрд╡ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, (рдЯреАрд╕реАрдкреА рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдЗрд╕рд▓рд┐рдП рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдЪреАрдЬ рддрдм рддрдХ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЛ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдмрд╕ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ HTTP рд▓реЛрдб-рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдФрд░ рдКрдкрд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде AWS рдкрд░ рдбреЙрдХ рдХреЗ рдЕрдВрджрд░ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ:

рдПрдХ рдбреЙрдХ рдЗрдореЗрдЬ рдХреЗ рдЕрдВрджрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.4.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдЙрдмрдВрдЯреВ 14.04 рдПрд▓рдЯреАрдПрд╕ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ> 1 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ 30 рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╕рдордп рдирд┐рд░рдВрддрд░ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд▓реЙрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ рдФрд░ рдЖрдк рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рджреЗрдЦреЗрдВрдЧреЗред

  • рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдореВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

    • рд╡реНрдпрд╡рд╣рд╛рд░ рдбреЙрдХрд░ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░/рд░рдЦрд░рдЦрд╛рд╡ рд╕реЗрдЯрд┐рдВрдЧ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд╢реАрд░реНрд╖рдХ рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХреЗрдВ ...

  • рдореИрдВрдиреЗ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦрд░рдЦрд╛рд╡ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИ: https://serverfault.com/questions/782022/keepalive-setting-for-gunicorn-behind-elb-without-nginx/ (рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рдЙрджреНрдзрд░рдг рд╣реИ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрдПрд▓рдмреА рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ) рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдм рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ред
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ gthread рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдм рддрдХ рдмрд╣реБрдд рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд╛рдпрд╛ рд╣реИред

рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 65s рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрд╡рдзрд┐ (AWS ELB рдЯрд╛рдЗрдордЖрдЙрдЯ 60s, AFAIK) рдХреЗ рд╕рд╛рде gevent рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЕрднреА рднреА рдХрднреА-рдХрднреА 504 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ, рддрдм рднреА рдЬрдм рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЙрдбрд╝рд╛рди рдореЗрдВ 1 рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдХрд╛рд░рдг рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред

@obi1kenobi рдХреНрдпрд╛ рдЖрдкрдиреЗ рд░рдЦрд╡рд╛рд▓реЗ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?

@lenucksi рд░рдЦрд░рдЦрд╛рд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5s рддрдХ

рдореБрдЭреЗ рднреА рдПрдХ рдИрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рдПрдХ рдИрд╕реА 2 рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.6 рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ (рдИрд╕реА 2 рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕-рдкреНрд░реЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛)ред

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рдЧреАрд╡реЗрдВрдЯ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ (рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ sync рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛)ред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░реВрдВрдЧрд╛ред

рджреВрд╕рд░реЛрдВ рдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ рдЙрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдИрдПрд▓рдмреА рдИрд╕реА 2 рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЬрдм рд╡рд╣ рд╣реЛрд▓реНрдб-рдУрдкрди рдХрдиреЗрдХреНрд╢рди рдИрдПрд▓рдмреА рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХрддрд╛рд░рдмрджреНрдз рд╕рднреА рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдз рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдИрдПрд▓рдмреА рдХреА рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рд╕рд╣рд┐рдд, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдИрдПрд▓рдмреА рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ; ) )

рдпрд╣ рд▓рдХреНрд╖рдг рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЕрдВрдХ рдореЗрдВ рдЬреЛ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ рдЬреЛ рдбреЙрдХрд░ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ: https://github.com/benoitc/gunicorn/issues/588

@jelis рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдХреНрдпрд╛ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реБрдЖ?

рдореИрдВ рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде рдИрдПрд▓рдмреА рдкрд░ рднреА рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

[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

рдЕрдкрдбреЗрдЯ - рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдЧрдирд┐рдХреЛрд░реНрди рд╕реЗ рдЧреАрд╡реЗрдВрдЯ (http://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/#gevent) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдпрд╣ рдореЗрд░реА рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИ https://github.com/benoitc/gunicorn/issues/1194#issuecomment -283269046

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рджреЛ рджрд┐рдиреЛрдВ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рд╕рднреА рдХреЗ рдиреЛрдЯреНрд╕ рд╢рд╛рдирджрд╛рд░ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рд╕реБрдзрд╛рд░/рд╕рдорд╛рдзрд╛рди/рд╢рдорди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд░рд╛рд╕реНрддреЗ рджреЗ рд░рд╣реЗ рд╣реИрдВред (рдореЗрд░реЗ рдХрд╛рдо рдХрд╛ рд▓реЙрдЧ рдЙрд╕ рдмрдЧ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рдЯреНрд░реИрдХ рдХрд░ рд░рд╣реЗ

рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдЧреАрд╡реЗрдВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдиреЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрджрддрд░ рдмрдирд╛ рджрд┐рдпрд╛ - рд╕рднреА рдкрд╛рдВрдЪ рдЧреАрд╡реЗрдВрдЯ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ, рдЬреЛ рдХрд┐ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдореИрдВрдиреЗ рдКрдкрд░ рдХреНрдпрд╛ рдкрдврд╝рд╛ рд╣реИ:

[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

рдпрд╣ рдореЗрд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХреБрдЫ рдкреЗрдВрдЪ-рдЕрдк рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдордХрдХреНрд╖реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдерд╛ (рдПрдХ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди-рд╕рдорд╛рди рдПрдбрдмреНрд▓реНрдпреВрдПрд╕/рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди/рдПрдПрд▓рдмреА/рдИрд╕реАрдПрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдПрд▓рдмреА, рдИрд╕реАрдПрд╕, рдбреЙрдХрд░ рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдореЗрдВ рдХрд┐рд╕реА рднреА рдирдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рд╣реИ (рдИрдПрд▓рдмреА-> рдИрд╕реАрдПрд╕ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░-> рдЧрдирд┐рдХреЛрд░реНрди-> рдбреАрдЬреЗрдВрдЧреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдиреЗ рдорджрдж рдХреА рд╣реИ:

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

рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдИрдПрд▓рдмреА рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЯрд╛рдЗрдордЖрдЙрдЯ 60 рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдХреАрдкрд▓рд╛рдЗрд╡, рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлреЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ 10 рдЕрдкреНрд░реИрд▓ рдХреЛ рд╕реБрдмрд╣ 4 рдмрдЬреЗ рдпреВрдЯреАрд╕реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реБрдЖред рдРрдк рдкрд┐рдЫрд▓реЗ рдЧреБрд░реБрд╡рд╛рд░ рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рдерд╛ред

рдмрд╕ рдвреЗрд░, рдХреЛрдИ рдбреЙрдХрдЯрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдирдВрдЧреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдИрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ред рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдПрдирдкреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдИрдПрд▓рдмреА рдХреЗ рд╕рд╛рде ubuntu16 рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ред gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдЗрд╕реЗ [рдореЗрд░реЗ рд▓рд┐рдП] рдареАрдХ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреЛрдИ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
https://serverfault.com/questions/782022/keepalive-setting-for-gunicorn-behind-elb-without-nginx

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдИрдПрд▓рдмреА рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рдордпрдмрд╛рд╣реНрдп рдХрдо рдХрд░реЗрдВред

рдЬрдВрдЧрд▓реА (рдпрд╛ рдПрдХ рдирд╛рдкрд╛рдХ рдЧреНрд░рд╛рд╣рдХ) рдореЗрдВ рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рдИрдПрд▓рдмреА рдХреА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ?

@ рдЫрд╣8 рд╣рд╛рдБред рдИрдПрд▓рдмреА рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рднреА рдирд╣реАрдВ рдмрдЪрд╛рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ: http://docs.gunicorn.org/en/latest/design.html#choosing -a-worker-type

рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕ рдЦрддрд░реЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ ELB рдХреЗ рдХрд┐рдирд╛рд░реЗ рдпрд╛ рдкреАрдЫреЗ Gunicorn рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╡рд╣ рдИрдПрд▓рдмреА рдХреА рд╡рдЬрд╣ рд╕реЗ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИред рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдмрд┐рдирд╛ рдИрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддреИрдирд╛рддреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдвреЗрд░, рд╕рд╛рде рд╣реАред рдИрдПрд▓рдмреА рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдХрд░ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ 8 рдХрд░реНрдордЪрд╛рд░реА рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдкреНрд░рддрд┐ https://serverfault.com/questions/782022/keepalive-setting-for-gunicorn-behind-elb-without-nginx/ , рд╣рдо keepalive рдКрдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп gevent рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдЕрднреА, рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрд╡рд░реБрджреНрдз/рд╕рдордпрдмрд╛рд╣реНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ sync рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рд╣рдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

--worker-class рдХреЛ --worker-class gevent рд╕реЗрдЯ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@wichert рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред рдЧреАрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде, рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдЕрд▓рдЧ рдЧреНрд░реАрдирд▓реЗрдЯ рдкрд░ рдЕрдкрдиреА рдЖрдЬреАрд╡рд┐рдХрд╛ рдХреЗ рдордзреНрдпрд╕реНрде рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреА рдХреАрдк-рдЕрд▓рд╛рдЗрд╡ рд╕реЗрдЯрд┐рдВрдЧ рдЗрд╕ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ gevent рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рддреНрдордХ рд╣реИ рдЬреЛ рдЗрди рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛, рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рд╣рд░ рдХреЛрдИ, рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрдИ рддрд░рд╣ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдФрд░ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрд▓рдЧ рдореБрджреНрджреЗ рджрдмреЗ рд╣реБрдП рд╣реИрдВред рдпрд╣ рдЬрд╛рдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

@tilgovi рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рддрдм рдХрд┐рдпрд╛ рдЬрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЛ https://github.com/7ideas/cookiecutter-falcon рд╕реЗ рдХреБрдХреА рдХрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рд╕рднреА рдирд╡реАрдирддрдо рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ sample_resource рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдФрд░ httpie рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рд╣рд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреНрд░реИрд╢ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдореЗрдВ рджреЗрд░реА рд╣реЛрдЧреА рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА; рдЕрдЧрд░ рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рдЕрдВрддрддрдГ рдЬрд╡рд╛рдм рджреЗрдЧрд╛)ред рдпрд╣ рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╣реБрдЖред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧреАрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред

рдзрдиреНрдпрд╡рд╛рдж, @ jhillhouse92 , рдореИрдВ рдЗрд╕реЗ

рдореБрдЭреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИрдВ, @tilgoviред рдореИрдВ рдХрд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрдбреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ; рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрдИ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╖рдп рдпрд╣ рд╣реИ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рд╡рд░реНрдХрд░реНрд╕ (рд╢рд╛рдпрдж рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕, рдЯреАрдмреАрдбреА рдХреЗ рд╕рд╛рде) рдХреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕/рдИрдПрд▓рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдирд╛рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд░рд╣реА рд╣реИрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрд▓рдЧ рди рдХрд┐рдпрд╛ рд╣реЛред рдпрд╣ рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдореИрдВ рдХрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбреЙрдХрд░/рдПрдбрдмреНрд▓реНрдпреВрдПрд╕/рдИрдПрд▓рдмреА рдХреЗ рднреАрддрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЧреАрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдкрдиреЗ рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕/рдИрдПрд▓рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдРрдк рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрдорд╛рдВрдб:

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 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкрд╛рдЧрд▓ рдУрдУрдПрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рд╕реАрдорд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реЛрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЗрд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ? рдкрд╣рд▓реЗ, рдореИрдВ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреЗрдЦ рдкрд╛ рд░рд╣рд╛ рдерд╛ред рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдореИрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛/рдЕрдм рддрдХ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

[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

рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдбреЙрдХрдЯрд░ рдХреЗ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рдпрд╣, рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореБрджреНрджреЗ, рдХреЗрд╡рд▓ рдбреЙрдХрд░/рдПрдбрдмреНрд▓реНрдпреВрдПрд╕/рдИрдПрд▓рдмреА рд╕реНрдЯреИрдХ (рдореЗрд░реЗ рд▓рд┐рдП) рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред

@tilgovi рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдЧрд▓рдд рдХреА рдереА (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ 10 рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рдерд╛ред рдЗрд╕реЗ 75 рд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдИ, рд╢рд╛рдпрдж рдкреНрд░рддрд┐ рджрд┐рди рдПрдХ рдЬреЛрдбрд╝реЗред рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдЯреАрдХ рдХрдорд╛рдВрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЕрдкрдирд╛ рдРрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

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

рдпрд╛рддрд╛рдпрд╛рдд рдХреА рдорд╛рддреНрд░рд╛ рдПрдХ рдХрд╛рд░рдХ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдореИрдВ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХреНрдпреВрдП рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдХрдо рдпрд╛рддрд╛рдпрд╛рдд рджреЗрдЦрддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдРрд╕рд╛ рдХрд┐рддрдиреА рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдРрдк рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдХреБрдЫ рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреБрдЫ рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рд╣реИ, рди рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рдХреАред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рд╣реИ:

  • Postgresql рд╕рд░реНрд╡рд░ EC2 рдкрд░ Docker рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдбреЙрдХрд░ рдЫрд╡рд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ 9.6 рд╣реИред
  • рдРрдк рд╕рд░реНрд╡рд░ рдИрд╕реА 2 рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡реАрдПрдо рдореЗрдВ рдбреЙрдХрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдбреЙрдХрд░ рдЫрд╡рд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрдЬрдЧрд░ 3.6 рд╣реИред
  • AWS рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯ 5432 / 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())

рдбреЙрдХрд░рдлрд╛рдЗрд▓:

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

рд▓реЙрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП macOS рд╕рд┐рдПрд░рд╛ рдкрд░ Docker 17.06.2-ce-mac27 (19124) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

[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 рддрдХ) рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдЕрдм рддрдХ рдХреЛрдИ рдФрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдРрд╕рд╛ рджреЛрдмрд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣рд╛рдВ рдХреЛрд░рд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЛрдбрд╝рдирд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЧреАрд╡реЗрдВрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд┐рд╕реНрдордд рдХреЗ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ 90 рддрдХ рдмрдврд╝рд╛рдиреЗ рдФрд░ 75 рддрдХ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

рд╕рд╛рде рд╣реА, рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдореЗрд░рд╛ рдИрдПрд▓рдмреА рдХреЗрд╡рд▓ рдЯреАрд╕реАрдкреА рд╕реНрддрд░ рдЕрдЧреНрд░реЗрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ HTTPред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдХреБрдЫ рд╕рдВрджрд░реНрдн рдорд┐рд▓реЗ рдЬреЛ рдЗрд╕реЗ рд╕рдордЭрд╛рддреЗ рд╣реИрдВред [1]

рдЗрд╕реЗ Gunicorn рдХреА рддрд░рдл рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐, рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд╕рд╛рде select() рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рддреЛ рд╣рдо рдЗрди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдХрдИ рд╕реБрдирдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рдеред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдмрд╛рдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░реЗрдЧрд╛ред

[рез] 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) рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

[реирежрезрен-режреп-реирей реиреи:рейрез:режреж +режрежрежреж] [рез] [рд╕реВрдЪрдирд╛] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рд╕рд┐рдВрдХ

@tilgovi рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рднреА рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ gevent рдХреЗ рд╕рд╛рде рдкреНрд░рдЬрдирди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ (рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдИрд╕реА 2 рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ -> рдЗрдирдмрд╛рдЙрдВрдб рдирд┐рдпрдо, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЖрдИрдкреА (рдореЗрд░рд╛ рдЖрдИрдкреА: XX.XX.XX.XX) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 5000 (рдпрд╣рд╛рдВ рдЧрдирд┐рдХреЛрд░реНрди) рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдЯреАрд╕реАрдкреА рдирд┐рдпрдо рд╣реИред /32), рдЗрд╕реЗ рд╕рднреА рдЖрдИрдкреА рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдореИрдВ рднреА рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реВрдВред

[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. рдХреЗрд╡рд▓ рдЕрдЧрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рддреЛ, рдЕрдиреБрд░реЛрдз рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдорд╛рд╕реНрдЯрд░ 30 рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░ рджреЗрдЧрд╛ред
  2. рдПрдХ рдмрд╛рд░ рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрднреА рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдЕрд╡рд░реБрджреНрдз рд╣реИ рдФрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм 30 рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рдФрд░ рдирдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреВрд╕рд░реЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд╕рд░реНрд╡рд░ рд╣реИрдВрдЧ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  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 рд╕реЗ рдкреНрд░реА-рдУрдкрди рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдпрд╛ Gunicorn рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

@tilgovi FWIW рдореИрдВрдиреЗ рдЗрд╕реЗ ALB рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ред рдореИрдВрдиреЗ рдХрднреА рднреА рдХреНрд▓рд╛рд╕рд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

@tilgovi рдореИрдВрдиреЗ рднреА рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░

@tilgovi рдореИрдВ рдЗрд╕рд╕реЗ рдорд┐рд▓рд╛ред рдореИрдВрдиреЗ рдХрднреА рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдПрдПрд▓рдмреА рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

@xgfone рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╢реАрд░реНрд╖рдХ "рдбреЙрдХрд░ + рдПрдбрдмреНрд▓реНрдпреВрдПрд╕" рд╣реИ

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдбреЙрдХрд░ рдХреЗ рдмрд┐рдирд╛? рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБ, рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ :)

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЙрдХрд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ - рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдбреЙрдХрд░ рдХреЗ рдЕрдВрджрд░ рдХрдИ рдЧрдирд┐рдХреЛрд░реНрди рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рдореБрджреНрджреЗ рдереЗред

рдЗрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдиреЗ рдЙрдмрдВрдЯреВ рдФрд░ рдЖрд░рдПрдЪрдИрдПрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рдбреЙрдХрд░ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рджреЛрдиреЛрдВ рдирдВрдЧреЗ рдзрд╛рддреБ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб:

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

рдбреЙрдХрд░ рдХреЗ рдЕрдВрджрд░ (рдЖрд░рдПрдЪрдИрдПрд▓, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╡рд╣реА), рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рднрд╛рдЧ рдЧрдП рдФрд░ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд▓реЗрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛рдХрд░ рдХрд╣реАрдВ рдФрд░ рд░рдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ ;-)

рдмреЗрд╕реНрдЯ, рдмреЛрд░рд┐рд╕

@tilgovi

рдпрд╣ рддреНрд░реБрдЯрд┐ arbiter.py, murder_workers ред murder_workers рдлрд╝рдВрдХреНрд╢рди рддрдм рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм SIG_QUEUE рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп)ред

рдлрд┐рд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣рд░ рд╕реЗрдХреЗрдВрдб рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдЬреАрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рд╕рдордп рд╣рдореЗрд╢рд╛ 1 рд╕реЗрдХрдВрдб рдпрд╛ 0 рд╕реЗрдХрдВрдб рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЧреАрд╡реЗрдВрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ self.alive рдиреЗ self.notify рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рд╣реИрдВ рдХрд┐ рдЖрдЦрд┐рд░реА рд╕рдХреНрд░рд┐рдп рд╕рдордп рд╣реЛрдиреЗ рдкрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреИрд╕реЗ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, murder_workers рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЗрд╡ рдЪреЗрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ) рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ gevent рдЬреАрд╡рд┐рдд рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рджреА рдЧрдИ рдереАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВ:

handle_quit
handle_request (рдпрджрд┐ рдЕрдзрд┐рдХрддрдо рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ 2^64 рдмрд┐рдЯ рдпрд╛ 32-рдмрд┐рдЯ рдУрдПрд╕ рд╣реЛрдиреЗ рдкрд░ 2^32 рд╣реИ)
changed (рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓реА рдЧрдИ рдереА рддреЛ рдкреБрдирдГ рд▓реЛрдбрд░ рд╕реЗ рдордВрдЧрд╛рдИ рдЧрдИ)
handle_exit
handle_abort

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХреЗрддреЛрдВ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

handle_quit - рд╕рд┐рдЧреНрдХреНрд╡рд┐рдЯ, рд╕рд┐рдЧрд┐рдирдЯ
handle_exit - рд╕рд┐рдЧрдЯрд░рдо
handle_abort - рд╕рд┐рдЧрд╛рдмрд░реНрдЯ

рдЗрд╕ рдкреНрд░рдХрд╛рд░, 2 рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:

  1. рд╕реВрдЪрдирд╛ рд╡рд┐рдзрд┐ рдЕрдкрдиреЗ рд▓реВрдк рдХреЗ рджреМрд░рд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ
  2. рд╕рд┐рдЧреНрдирд▓ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░рдг рджреВрд╕рд░рд╛ рд╣реИред рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдЖрд░реНрдмрд┐рдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рд╣реИ рдФрд░ рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • StopIteration
  • KeyboardInterrupt
  • HaltServer
  • Exception (рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрдкрд╡рд╛рдж)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЙрдкрдЗрдЯрд░реЗрд╢рди рдЕрдкрд╡рд╛рдж рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдкрд░рд╛рдзреА рдиреЗ async.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ req = six.next(parser) рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рд╕рд┐рд░реНрдл 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 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрдИ рдРрдк рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ , рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВред

рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ рдФрд░ рдЗрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛:

  • рдбреЙрдХрд░ рд▓реЛрдХрд▓
  • рдХреНрд▓рд╛рд╕рд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдбреЙрдХрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕
  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдбреЙрдХрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕

рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд░реЗрдкреЛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХреЗ, рддреЛ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдореИрдВ AWS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ -> рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ (рдЬреАрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░реНрд╕ + Django рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди) рд╣реИред рдореИрдВ Gunicorn рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдп @ рдбреЗрд╡рд┐рдбрдорд┐рд░ ,
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред рдПрдХрд╛рдзрд┐рдХ рдзрд╛рдЧреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЪрд╛рд▓ рдЪрд▓ рд░рд╣реА рд╣реИ:

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

рдмреЗрд╕реНрдЯ, рдмреЛрд░рд┐рд╕

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдКрдкрд░ рдХреБрдЫ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реНрдореГрддрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВ; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЧрд░ рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдЧрд┐рдирддреА рдХреЛ 1 рдореЗрдВ рдмрджрд▓рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдбреЙрдХрд░ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ:

workers = multiprocessing.cpu_count() * 2 + 1

рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕реНрдореГрддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд░реНрдХрд░ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИрд╡реАрд╡реЗрдЯ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реАрдкреАрдпреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд╢реАрди рдХреА рд╕рдордЧреНрд░ рд╕реАрдкреАрдпреВ рдЧрдгрдирд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рди рдХрд┐ рдЙрд╕ рдкрд░ рдЬреЛ рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд┐рдпрд╛ рд╣реИ; рдпрджрд┐ рдЖрдк рдПрдХ рд╕реАрдорд┐рдд рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╡реЗрджрди рд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдореЗрд░реЗ рдЕрдВрдЧреВрдареЗ рдХрд╛ рдирд┐рдпрдо рдПрдХ рджреБрдмрд▓рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 256 рдореЗрдЧреНрд╕ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 512 рд╣реИред

рдХреНрд▓рд╛рд╕рд┐рдХ рдИрдПрд▓рдмреА HTTPS => HTTP Gunicorn рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдмрдЬрд╛рдп -k gevent рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдлрд┐рдХреНрд╕ рдерд╛ред

рд╣рдордиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ (рдПрдПрд▓рдмреА рдХреЗ рдкреАрдЫреЗ рдИрд╕реАрдПрд╕ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрд╛, рдФрд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ (рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реА рдмрд╛рд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛: рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯред

рд╣рдо рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкреАрдбрд╝рд┐рдд рдереЗ рдФрд░ рдзреВрдореНрд░рдкрд╛рди рдмрдВрджреВрдХ рдореВрд▓ рдХрд╛рд░рдг рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдЖрдЬ рд░рд╛рдд рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдирдП рдХрдВрдЯреЗрдирд░ рдкрд░ рджреЗрдЦрд╛, рдФрд░ рдпрд╣ рджреЗрдЦрд╛ рдХрд┐ рдХрдВрдЯреЗрдирд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рд╕рднреА рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛ рд░рд╣рд╛ рдерд╛ред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЖрд╡рдВрдЯрди рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░ рджрд┐рдпрд╛, рдХрдВрдЯреЗрдирд░реЛрдВ рдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛, рдЕрдВрддрддрдГ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛):
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 , рд╕рд░реНрдХрд╕рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЪрд▓рддреА рд╣реИрдВ

рдореБрдЭреЗ рдорд┐рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореЗрд░реЗ django рдРрдк рдХреЛ рд▓реЛрдЪрджрд╛рд░-рдПрдкреАрдПрдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реА HTTP рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдЧрдирд┐рдХреЛрд░реНрди рдЕрдиреБрддреНрддрд░рджрд╛рдпреА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рд╕реНрдерд╛рдиреАрдп wrk рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕рд┐рдВрдХ рдХреЛ 1-5 рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 300rps рдорд┐рд▓ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди gevent рдХреЛ 1rps рдорд┐рд▓реЗрдЧрд╛ред рдПрдкреАрдПрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд▓рдЧрднрдЧ релреж рдЖрд░рдкреАрдПрд╕ рддрдХ рдЬреАрд╡реЗрдВрдЯ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдирдЧрдгреНрдп рд╡реГрджреНрдзрд┐ рд╣реБрдИред

рд╡рд╛рд▓рдЧреНрд░рд┐рдВрдб рдкрд░ рдХреЛрдИ рдЕрдЬреАрдм рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рджреЗрдЦрд╛, рдЖрдорддреМрд░ рдкрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 4 рдПрдордмреА рдФрд░ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 40 рдПрдордмреА

рд╡реИрд╕реЗ рднреА, gunicorn 19.6.0 > 19.9.0 рдФрд░ gevent 1.2.2 > 1.3.6 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдПрдХ рд░реЙрдХ рд╕реНрдЯреАрдбрд┐рдВрдЧ ELB рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдлрд┐рд░ рд╕реЗ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ ~300rpsред рдЬрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдПрдкреАрдПрдо рд▓реЙрдЧрд┐рдВрдЧ рдирд╣реАрдВ рдереА, рддрдм рддрдХ рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЧрдирд┐рдХреЛрд░реНрди/рдЧреАрд╡реЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдЧрдВрднреАрд░рддрд╛ рдЖрдИ рд╣реИред рдЧреАрд╡реЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ 10% рдпрд╛ рддреЛ рдФрд░ рдЬреБрдбрд╝ рдЧрдпрд╛ред

рдЕрднреА рддрдХ рдЪреИрдВрдЬреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЕрдиреБрд░рдХреНрд╖рдХ рд╕рдмрд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░рдг рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рд╡реИрд╕реЗ рднреА, gunicorn 19.6.0 > 19.9.0 рдФрд░ gevent 1.2.2 > 1.3.6 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рд░реЙрдХ рд╕реНрдЯреАрдбрд┐рдВрдЧ ELB рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ ~300rps... рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ gevent рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓рд╛ рд╣реИред

рд╡рд╛рд╣, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рд╕рдорд╛рдкрди рдореБрджреНрджрд╛ред рдереЛрдбрд╝реА рджреЗрд░ рд╕реЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВред

FWIW, рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ @benoitc :-\

Django 2.1.5
рдЧрдирд┐рдХреЛрд░реНрди 19.8.1
рдЧреАрд╡реЗрдВрдЯ 1.2.2
AKS 1.15.7 5 рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде (рдорд╛рдирдХ B2's - 2 vcores рдФрд░ 2GB рдореЗрдореЛрд░реА)
3 рдкреЙрдб/рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╣реИ:

    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 рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рднреА рд▓реЙрдЧ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдХрд╛ рдРрдк рднреА рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдХреЛрдИ рд▓рдВрдмрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ?

рдИрд╕реАрдПрд╕ рдлрд╛рд░рдЧреЗрдЯ рдкрд░ рдореЗрд░рд╛ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЙрдХрд░/gunicorn.conf.py рдореЗрдВ рдЧрд▓рдд рд░рдЦрд░рдЦрд╛рд╡/рд╕рдордпрдмрд╛рд╣реНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рдпрд╣ рдерд╛
рд░рдЦрд╡рд╛рд▓реЗ (рд╕реЗрдЯ рдирд╣реАрдВ)
рд╕рдордп рд╕рдорд╛рдкреНрдд = реи

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ECS Fargate рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдЕрдм рдпрд╣ рджреЛрдиреЛрдВ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Abraxos picture Abraxos  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mrwillis picture mrwillis  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

davidfstr picture davidfstr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gr790 picture gr790  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mw44118 picture mw44118  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ