ïŒããã§ã®ç¬ãèšã¯ç³ãèš³ãããŸãããåçŽãªããšãè€éã«ãªããã¹ã¿ãã¯ãæãäžããŠããŸããŸããããã ããç§ãææžåããå 容ãèªè ã®åœ¹ã«ç«ã€ããšãé¡ã£ãŠããŸããïŒ
ç§ãç解ããããã«ãããã©ã«ãã§ã¯ïŒ
30
ç§ïŒ timeout
ã§æ§æå¯èœïŒã®åŸãgunicornãã¹ã¿ãŒããã»ã¹SIGTERM
ãã¯ãŒã«ãŒããã»ã¹ã«éä¿¡ããŠãæ£åžžãªåèµ·åãéå§ããŸãã30
ç§éã·ã£ããããŠã³ããªãå ŽåïŒ graceful_timeout
ã§æ§æå¯èœïŒããã¹ã¿ãŒããã»ã¹SIGKILL
ãéä¿¡ããŸãã ãã®ã·ã°ãã«ã¯ãã¯ãŒã«ãŒãgraceful_timeout
ã®æéäžã«æ£åžžã«ã·ã£ããããŠã³ãããšãã«ãéä¿¡ãããããã§ãïŒhttps://github.com/benoitc/gunicorn/commit/d1a09732256fa8db900a1fe75a71466cf2645ef9ïŒã質åïŒ
SIGTERM
ã·ã°ãã«ãã©ã®ããã«åŠçããŸããïŒå®éã«ã¯ããªã¯ãšã¹ãåŠçäžã«äœãèµ·ãããŸããïŒ ãªã¯ãšã¹ãåŠçãå®äºããåŸã«ã·ã£ããããŠã³ããå¿
èŠãããWSGIã¢ããªã±ãŒã·ã§ã³ïŒwerkzeugã¬ãã«ïŒã®ãã©ã°ãèšå®ããã ãã§ããïŒ ãŸãã¯ã SIGTERM
ã¯ãé²è¡äžã®èŠæ±åŠçã«ãã§ã«äœããã®åœ±é¿ãåãŒããŠããŸããïŒIOæ¥ç¶ã匷å¶çµäºããããèŠæ±åŠçãé«éåããããã«äœã...ïŒSIGKILL
ã§ã¯ããªã¯ãšã¹ãåŠçã匷å¶çã«äžæ¢ããããšæããŸãã
ç©äºãå®éã«ã©ã®ããã«æ©èœããããç解ã§ããã°ãããã«é¢ããããã¥ã¡ã³ããæ¹åããããã«å°ããªPRãæåºããããšãã§ããŸãã
ããŒãã httpsïŒ //github.com/benoitc/gunicorn/issues/1236#issuecomment SIGTERM
ã¯ããªã¯ãšã¹ãåŠçãå®äºããåŸã«ã¯ãŒã«ãŒãã·ã£ããããŠã³ããããã«èšå®ããïŒãããŠã¯ãŒã«ãŒãåãå
¥ããªãããã«èšå®ããïŒãšããç§ã®ä»®å®ã確èªããŠãããšæããŸãæ°ããæ¥ç¶ïŒã
timeout
ãšgraceful_timeout
ã®è§£éãééã£ãŠããããã§ãã ã©ã¡ãã®æéããå®éã«ã¯èŠæ±åŠçã®éå§æãæããŸãã ãããã£ãŠãããã©ã«ãã§ã¯ãäž¡æ¹ã®èšå®ã30
ç§ã«èšå®ãããŠãããããæ£åžžãªåèµ·åã¯æå¹ã«ãªããŸããã --graceful-timeout 15 --timeout 30
ã®ãããªããšããããšã15ç§ã§æ£åžžãªåèµ·åãéå§ããããã以åã«ãªã¯ãšã¹ããå®äºããªãã£ãå Žåãã¯ãŒã«ãŒã¯30ç§ã§åŒ·å¶çµäºãããŸãã
ãã ããå¿çãgraceful_timeout
ãštimeout
ã®éã«è¿ãããå Žåãã¯ãŒã«ãŒã¯çµå±åèµ·åãããªãããã§ãã ãããŸãããïŒ
app.py
ã§ãã¹ãããŸããïŒ
import time
from flask import Flask
app = Flask(__name__)
@app.route('/foo')
def foo():
time.sleep(3)
return 'ok'
ããã§ïŒ
12:51 $ gunicorn app:app --timeout 5 --graceful-timeout 1
[2017-04-03 12:51:37 +0300] [356] [INFO] Starting gunicorn 19.6.0
[2017-04-03 12:51:37 +0300] [356] [INFO] Listening at: http://127.0.0.1:8000 (356)
[2017-04-03 12:51:37 +0300] [356] [INFO] Using worker: sync
[2017-04-03 12:51:37 +0300] [359] [INFO] Booting worker with pid: 359
次ã«ã curl localhost:8000/foo
ãéä¿¡ããŸããããã¯ã3ç§åŸã«è¿ãããŸãã ããããgunicornã§ã¯äœãèµ·ãããŸãã-ã°ã¬ãŒã¹ãã«ãªã¹ã¿ãŒããéå§ãŸãã¯çºçããçè·¡ã¯ãããŸãããïŒ
timeout
ã§ã SystemExit(1,)
ãã¹ããŒãããFlaskã§ã®çŸåšã®ãªã¯ãšã¹ãåŠçãäžæ¢ãããããã§ãã ã©ã®ã³ãŒããŸãã¯ä¿¡å·ããããçæããã®ããèšãããšã¯ã§ããŸããã
ãã®äŸå€ã¯Flaskã¹ã¿ãã¯ãä»ããŠã¹ããŒããã teardown_request
ãã³ãã©ãŒãããããã£ããããŸãã äœãããã°ã«èšé²ããã®ã«ååãªæéã¯ãããŸããããã³ãã©ãŒã§time.sleep(1)
ãŸãã¯ãã®ä»ã®æéã®ãããäœæ¥ãè¡ããšããµã€ã¬ã³ãã«åŒ·å¶çµäºãããŸãã ããã»ã¹ãå®éã«åŒ·å¶çã«çµäºãããŸã§ã«100ã200ããªç§ã®æéããã£ããã®ããã§ããããã®é
延ã¯äœã§ãããçåã«æã£ãŠããŸãã æ£åžžãªã¿ã€ã ã¢ãŠãã§ã¯ãããŸããããã®èšå®ã¯é
延ã«åœ±é¿ãäžããŸããã SystemExit
ãã¹ã¿ãã¯ãä»ããŠã¹ããŒãããã®ãèŠãã®ã§ã¯ãªããããã»ã¹ããã®å Žã§åŒ·å¶çã«åŒ·å¶çµäºãããããšãæåŸ
ããŸããããšã«ãã空äžã§ããã»ã¹ã匷å¶çµäºããå¯èœæ§ããããŸãã
å®éã graceful_timeout
ãäœãããŠããªãããã§ããåæã¯ãŒã«ãŒã§ã¯ãµããŒããããŠããªããããã¹ã¿ã³ãã¢ãã³ãïŒãŸãã¯timeout
ãšäžç·ã«ïŒã§ã¯æ©èœããªãå¯èœæ§ããããŸãã SIGTERM
ãæåã§éä¿¡ããå Žå
ãŸããå¥åŠãããããªãã®ã¯ã httpsïŒ//github.com/benoitc/gunicorn/blob/master/gunicorn/arbiter.py#L392ãgraceful
ãã©ã°ããŸã£ãããã§ãã¯ããªãããšã§ãã https://github.com/benoitc/gunicorn/blob/master/gunicorn/arbiter.py#L390ã¯ã self.WORKERS
ã空ã§ããããšãä¿èšŒããã®ã§ãéã°ã¬ãŒã¹ãã«ã¹ããããå®è¡ãããšãã«ã°ã¬ãŒã¹ãã«ã¿ã€ã ã¢ãŠããåŸ
æ©ãããªãããã«ããŸãã
@benoitc @tilgoviããã§æãå·®ã䌞ã¹ãŠãããŸãããïŒ ããŸãããã°ãäžèšã®ç§ã®æç« ã¯çã«ããªã£ãŠããŸã...
@ tuco86 graceful timeout
ã¯ãã¢ãŒãã¿ãŒãçµäºããããã¢ããã°ã¬ãŒãããïŒUSR2ïŒããã¢ãŒãã¿ãŒã«HUPã·ã°ãã«ãéä¿¡ããããã¯ãŒã«ãŒã«QUITã·ã°ãã«ãéä¿¡ããå Žåã«ã®ã¿äœ¿çšã§ããŸãã ã€ãŸããã¢ã¯ã·ã§ã³ãæ£åžžãªå Žåã«ã®ã¿äœ¿çšãããŸã
ã¿ã€ã ã¢ãŠãã¯ãå¿ããã¯ãŒã«ãŒãä»ã®ãªã¯ãšã¹ãããããã¯ããã®ãé²ãããã«ããã«ãããŸãã timeout
æªæºã®æéå
ã«ã¢ãŒãã¿ãŒã«éç¥ããªãå Žåãã¯ãŒã«ãŒã¯åã«çµäºããã¯ã©ã€ã¢ã³ããšã®æ¥ç¶ãéããããŸãã
ãããšã倧äžå€«ã§ãã timeout
ã¯ã次ã®å Žåã«å¹æããããŸããïŒ
ã¢ãŒãã¿ãŒãçµäºããã¢ããã°ã¬ãŒããïŒUSR2ïŒãã¢ãŒãã¿ãŒã«HUPã·ã°ãã«ãéä¿¡ããããã¯ãŒã«ãŒã«QUITã·ã°ãã«ãéä¿¡ããŸã
ã€ãŸããã¯ãŒã«ãŒãgraceful_timeout
ã§ã·ã£ããããŠã³ããªãå Žåããã®åŸtimeout
ãèµ·åããã¯ãŒã«ãŒã匷å¶çã«æ®ºãããã®ã§ããããããããšããŠãŒã¶ãŒãSIGQUIT
ãèŠæ±ããã®ã¯ãŠãŒã¶ãŒã«ä»»ãããŠããã®ã§ããããã
åŽåè ãžã®QUITä¿¡å·
ããã§TERM
ãæå³ããŠãããšæããŸãïŒ QUIT
ã¯ãã¹ã¿ãŒãšã¯ãŒã«ãŒã®äž¡æ¹ã®_ã¯ã€ãã¯ã·ã£ããããŠã³_ãšããŠææžåãããŠããããïŒïŒ
æ£åžžãªæéå ã«ã¯ãŒã«ãŒãã·ã£ããããŠã³ããªãå Žåãä»ã®é 延ãªãã«ã¯ãŒã«ãŒã匷å¶çµäºãããŸãã
ãã¡ããã ç©äºãæ確ã«ããŠãããŠããããšãïŒ
@benoitcãã®å€ããã±ããã®ã³ã³ããã¹ãã§è³ªåãã- timeout
ããã¥ã¡ã³ãã®æåŸã®æã¯å®éã«ã¯ã©ãããæå³ã§ããïŒ
éåžžã¯30ç§ã«èšå®ããŸãã åæã¯ãŒã«ãŒãžã®åœ±é¿ã確å®ãªå Žåã«ã®ã¿ããããèããé«ãèšå®ããŠãã ããã éåæã¯ãŒã«ãŒã®å Žåãããã¯ãã¯ãŒã«ãŒããã»ã¹ããŸã éä¿¡äžã§ãããåäžã®èŠæ±ãåŠçããããã«å¿ èŠãªæéã®é·ãã«çžãããŠããªãããšãæå³ããŸãã
è±èªãæ¯åœèªãšããªãã®ã§ããããç解ããã®ã«èŠåŽããŠããŸãã timeout
ãéåæã¯ãŒã«ãŒã§ãµããŒããããŠããªãããšãæå³ããŸããïŒããã¯ç§ãç®æããŠããããã«èŠããããã§ãïŒç§ã¯gthread
ã¯ãŒã«ãŒã䜿çšããŠãããã¿ã€ã ã¢ãŠãã¯éå§ããããé
ããããªã¯ãšã¹ãã匷å¶çµäºããŸãïŒïŒ
@tuukkamustonen --timeout
ã¯ããªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠããæå³ãããã®ã§ã¯ãããŸããã ããã¯ãåŽåè
ã®æŽ»åãã§ãã¯ãç®çãšããŠããŸãã åæã¯ãŒã«ãŒã®å Žåãã¯ãŒã«ãŒã¯ãªã¯ãšã¹ããåŠçãã以å€ã«äœãã§ããªããããããã¯ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠããšããŠæ©èœããŸãã éåæã¯ãŒã«ãŒã¯ãé·æéå®è¡ãããèŠæ±ãåŠçããŠããéã§ãããŒãããŒããå®è¡ãããããã¯ãŒã«ãŒããããã¯/ããªãŒãºããªãéãã匷å¶çµäºãããŸããã
ä»ã®äººããããæ··ä¹±ãããŠãããšæããå Žåã¯ãååãå€æŽããããšããå§ãããŸãã
@tilgovi timeout
ã¯åé¡ãããŸãããã worker_timeout
ã®ãããªãã®ã®æ¹ããããããããããããŸããã timeout
ãšgraceful_timeout
ãããã¥ã¡ã³ãã§é£ãåã£ãŠå®£èšãããŠãããããæåã¯æ··ä¹±ããŸããããã®ãããå®éã«ã¯ããã§ã¯ãªãã®ã«ãç§ã®è³ã¯ããããç·å¯ã«æ¥ç¶ãããŠãããšæ³å®ããŸããã
åæã¯ãŒã«ãŒã®å Žåãã¯ãŒã«ãŒã¯ãªã¯ãšã¹ããåŠçãã以å€ã«äœãã§ããªããããããã¯ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠããšããŠæ©èœããŸãã éåæã¯ãŒã«ãŒã¯ãé·æéå®è¡ãããèŠæ±ãåŠçããŠããéã§ãããŒãããŒããå®è¡ãããããã¯ãŒã«ãŒããããã¯/ããªãŒãºããªãéãã匷å¶çµäºãããŸããã
timeout
ãéåæã¯ãŒã«ãŒã§èµ·åããäŸã¯ãããŸããïŒ ããã¯æ±ºããŠèµ·ãããªãã¯ãã®ããšãªã®ããå®éã«ã¯ãã¯ãŒã«ãŒããããã¯/ããªãŒãºããåå ãšãªããã°ãããå Žåã«éããŸããïŒ
ãã®ãšããã§ããã€ãã³ãã«ãŒãã³ã¢ã«äŸåããéåæã¯ãŒã«ãŒã¯ãã¿ã€ã ã¢ãŠãå ã«çæãããªãCPUéäžåã®æé ãå®è¡ããå¯èœæ§ããããŸãã
ã€ãŸãããã°ã ãã§ã¯ãããŸããã ãã ããéåæãããã³ã«ã®æ¹ãé©åãªå Žåã«ãããããã³ã°I / Oé¢æ°ãåŒã³åºããªã©ã®ãã°ã瀺ããŠããå ŽåããããŸãã
ãããã§ãCPUãéäžçã«äœ¿çšããã¿ã¹ã¯ã§ç«ã¡åŸçããã®ã¯è¯ãäŸã§ãã
éåæã³ãŒãã§ããããã³ã°I / OãåŒã³åºãããšã1ã€ã§ããããã®ã³ã³ããã¹ãã«ã©ã®ããã«é©çšããããã¯ããããŸãã-ããããã³ã°ã³ãŒãã䜿çšããŠåŸæ¥ã®Flaskã¢ããªãå®è¡ããŠããŸãããéåæã¯ãŒã«ãŒïŒ gthread
ïŒã䜿çšããŠå®è¡ããŠããŸã
ãŸããå¿æééã¯ã©ã®ãããã§ããïŒ éåæã¯ãŒã«ãŒã§timeout
ã«äœ¿çšããé©åãªå€ã¯äœã§ããããïŒ
gthreadã¯ãŒã«ãŒã¯éåæã§ã¯ãããŸããããããŒãããŒãçšã®ã¡ã€ã³ã¹ã¬ããããããããã¿ã€ã ã¢ãŠããçºçããŸããã ãã®ã¯ãŒã«ãŒã®å Žåãã¯ãŒã«ãŒãéåžžã«éè² è·ã«ãªã£ãŠããªãéãããŸãã¯ããããCæ¡åŒµã¢ãžã¥ãŒã«ãåŒã³åºããŠGILã解æŸããªãéããã¿ã€ã ã¢ãŠãã¯è¡šç€ºãããªãå¯èœæ§ããããŸãã
ã¯ãŒã«ãŒã®ã¿ã€ã ã¢ãŠãã衚瀺ããå§ããªãéããããããã¿ã€ã ã¢ãŠããå€æŽããå¿ èŠã¯ãããŸããã
倧äžå€«ã ããšããäžã€ã ãïŒ
gthreadã¯ãŒã«ãŒã¯éåæã§ã¯ãããŸãã
gthread
ã¯ãŒã«ãŒãéåæã§ã¯ãªãã httpïŒ //docs.gunicorn.org/en/stable/design.html#asyncio-workersã«ãAsyncIOãã¯ãŒã«ãŒãšããŠãªã¹ããããŠããããšã¯å°ãæ··ä¹±ãããããããŸããã ãã以å€ã¯ããã¹ã¬ãããã䜿çšããã®ã«éåæã¯å¿
èŠãªãã®ã§ãèªè
ã«ãçåãçããŸãã ãã€ãŒããªãŠãŒã¶ãŒã®èŠ³ç¹ãããããèšãã ãã§ãããã¯ãã¹ãŠæè¡çã«ååãªæ ¹æ ããããšç¢ºä¿¡ããŠããŸãã
äžèšã§èšãã°ã gthread
ã¯ãŒã«ãŒã¯asyncio
libã§å®è£
ãããŸãããåæã³ãŒããåŠçããããã«ã¹ã¬ãããçæããŸãã ééã£ãŠãããèšæ£ããŠãã ããã
ãããããé¡ãããŸãïŒ
ã¹ã¬ããåãããã¯ãŒã«ãŒã¯asyncioã䜿çšãããåºæ¬ã®éåæã¯ãŒã«ãŒã¯ã©ã¹ããç¶æ¿ããŸããã
ããã¥ã¡ã³ããæ確ã«ããå¿ èŠããããŸãã ã¯ãŒã«ãŒã®ã¿ã€ã ã¢ãŠããåæã«åŠçããããããéåæãšããŠãªã¹ããããŠããå¯èœæ§ããããŸããããã«ãããé·ãèŠæ±ãšåæèŠæ±ãåŠçããæ©èœã«é¢ããŠãåæã¯ãŒã«ãŒãããéåæã¯ãŒã«ãŒã®ããã«åäœããŸãã
ããã¥ã¡ã³ããæ確ã«ãããã¹ãŠã®äœæ¥è ãããæ£ç¢ºã«èª¬æã§ããããã«ãããšäŸ¿å©ã§ãã
ãããgthreadsã¯ãŒã«ãŒã¯asyncioã¯ãŒã«ãŒã«ãªã¹ããããã¹ãã§ã¯ãããŸããã ãã¶ããååŽåè ã®ãã¶ã€ã³ã説æããã»ã¯ã·ã§ã³ãããæ¹ãè¯ãã§ããããïŒ
ãããå床éããŠãã¯ãŒã«ãŒã¿ã€ããšã¿ã€ã ã¢ãŠãã«é¢ããã»ã¯ã·ã§ã³ãæ確ã«ããããã®äœæ¥ãšããŠè¿œè·¡ã§ããããã«ããŸãã
@tilgovi
--timeoutã¯ãèŠæ±ã®ã¿ã€ã ã¢ãŠããæå³ãããã®ã§ã¯ãããŸããã ããã¯ãåŽåè ã®æŽ»åãã§ãã¯ãç®çãšããŠããŸãã åæã¯ãŒã«ãŒã®å Žåãã¯ãŒã«ãŒã¯ãªã¯ãšã¹ããåŠçãã以å€ã«äœãã§ããªããããããã¯ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠããšããŠæ©èœããŸãã éåæã¯ãŒã«ãŒã¯ãé·æéå®è¡ãããèŠæ±ãåŠçããŠããéã§ãããŒãããŒããå®è¡ãããããã¯ãŒã«ãŒããããã¯/ããªãŒãºããªãéãã匷å¶çµäºãããŸããã
éåæã¯ãŒã«ãŒã§äœ¿çšã§ããèŠæ±ã¿ã€ã ã¢ãŠããªãã·ã§ã³ã¯ãããŸããïŒ èšãæããã°ãã¢ãŒãã¿ãŒã«ãæå®ãããæéå ã«ãªã¯ãšã¹ããåŠçããªãã£ãã¯ãŒã«ãŒã匷å¶çµäºãããæ¹æ³ã¯ãããŸããïŒ
@aschattenæ®å¿µãªããããããŸããã ïŒ1658ãåç §ããŠãã ããã
æå®ãããæéå ã«ãªã¯ãšã¹ããåŠçããªãã£ãã¯ãŒã«ãŒã匷å¶çµäºããŸã
ã¯ãŒã«ãŒãè€æ°ã®ãªã¯ãšã¹ããåæã«åŠçããŠããå¯èœæ§ãããããã1ã€ã®ãªã¯ãšã¹ããã¿ã€ã ã¢ãŠããããããã¯ãŒã«ãŒå šäœã匷å¶çµäºããããšã¯éåžžã«æ¥µç«¯ã«èãããŸãã ãã®çµæãä»ã®ãã¹ãŠã®ãªã¯ãšã¹ããç¡é§ã«æ®ºãããŠããŸãã®ã§ã¯ãªãã§ããããã
uWSGIã2.1ããããã§ã¹ã¬ããããŒã¹ã®æ®ºå®³ãå°å ¥ããããšãèšç»ããŠããããšãæãåºããŸãããããããããã¯åæ/ã¹ã¬ããã¯ãŒã«ãŒã«ã®ã¿é©çšãããŸãïŒãããŠããã«é¢ããç§ã®èšæ¶ã¯ãããŸãã§ãïŒã
ã¯ãŒã«ãŒãè€æ°ã®ãªã¯ãšã¹ããåæã«åŠçããŠããå¯èœæ§ãããããã1ã€ã®ãªã¯ãšã¹ããã¿ã€ã ã¢ãŠããããããã¯ãŒã«ãŒå šäœã匷å¶çµäºããããšã¯éåžžã«æ¥µç«¯ã«èãããŸãã ããã§ã¯ãä»ã®ãã¹ãŠã®ãªã¯ãšã¹ããç¡é§ã«æ®ºãããããšã«ãªããŸãããïŒ
ã¢ãããŒãã¯max_request
ã®å Žåãšåãã§ãã¯ãŒã«ãŒã¿ã€ãããšã«åå¥ã®å®è£
ããããŸãã
ç§ãã¡ã¯ä»é±ãªãªãŒã¹ã«åãçµãã§ããããã®æç¹ã§R20ã«åå²ããææã«ãªããããããŸãããããã§ã¯ãããã€ãã®äž»èŠãªããšã«åãçµãäºå®ã§ãã ããã¯ãçŸåšã®ã¿ã€ã ã¢ãŠãããã¹ãŠã®ã¯ãŒã«ãŒã¿ã€ãã®é©åãªèŠæ±ã¿ã€ã ã¢ãŠãã«ããã®ã«é©åãªã¿ã€ãã³ã°ã§ããå¯èœæ§ããããŸãã
ã¿ã€ã ã¢ãŠããã©ã®ããã«æ©èœããããç解ããããšããŠããã®ã§ãå¥ã®åé¡ãæåºãã代ããã«ããã«ã³ã¡ã³ãããŸããããããã°ãã©ããã¯ããããŸããã
ç§ãèŠãŠããIMOã®äºæããªãåäœã¯æ¬¡ã®ãšããã§ãã
ãã¹ãŠã®max-requestsã®èŠæ±ïŒãã®åŸã¯ãŒã«ãŒãåèµ·åãããèŠæ±ïŒã¯ã¿ã€ã ã¢ãŠãã«ãªããŸãããä»ã®èŠæ±ã¯æ£åžžã«å®äºããŸãã 以äžã®äŸã§ã¯ã4ã€ã®èŠæ±ãå®è¡ãããèŠæ±1ã2ãããã³4ã¯æåããŸãããèŠæ±3ã¯å€±æããŸãã
é¢é£ããæ§æïŒ
import time
def app(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain; charset=utf-8')])
time.sleep(5)
return [b"Hello World\n"]
gunicornïŒ
gunicorn --log-level debug -k gthread -t 4 --max-requests 3 "app:app"
...
[2018-02-08 10:11:59 +0200] [28592] [INFO] Starting gunicorn 19.7.1
[2018-02-08 10:11:59 +0200] [28592] [DEBUG] Arbiter booted
[2018-02-08 10:11:59 +0200] [28592] [INFO] Listening at: http://127.0.0.1:8000 (28592)
[2018-02-08 10:11:59 +0200] [28592] [INFO] Using worker: gthread
[2018-02-08 10:11:59 +0200] [28595] [INFO] Booting worker with pid: 28595
[2018-02-08 10:11:59 +0200] [28592] [DEBUG] 1 workers
[2018-02-08 10:12:06 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:11 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:15 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:20 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:23 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:23 +0200] [28595] [INFO] Autorestarting worker after current request.
[2018-02-08 10:12:27 +0200] [28592] [CRITICAL] WORKER TIMEOUT (pid:28595)
[2018-02-08 10:12:27 +0200] [28595] [INFO] Worker exiting (pid: 28595)
[2018-02-08 10:12:28 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:28 +0200] [28599] [INFO] Booting worker with pid: 28599
[2018-02-08 10:12:32 +0200] [28599] [DEBUG] GET /
[2018-02-08 10:12:37 +0200] [28599] [DEBUG] Closing connection.
^C[2018-02-08 10:12:39 +0200] [28592] [INFO] Handling signal: int
ã¯ã©ã€ã¢ã³ãïŒ
[salonen<strong i="19">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
[salonen<strong i="20">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
[salonen<strong i="21">@mac</strong> ~]$ curl http://127.0.0.1:8000
curl: (52) Empty reply from server
[salonen<strong i="22">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
ããã§ã®èšç»ã¯ã©ãããã¹ãã§ããïŒ ç§ã¯æ¬¡ã®ããšã念é ã«çœ®ããŠããŸãïŒ
20.0ã«ããå¿ èŠããããŸããããããšã延æã§ããŸããïŒ
延æã
ãããããã¯20.0ã®äžéšã§ã¯ãªãã®ã§ããïŒ
ããã¯ãçŸåšã®ã¿ã€ã ã¢ãŠãããã¹ãŠã®ã¯ãŒã«ãŒã¿ã€ãã®é©åãªèŠæ±ã¿ã€ã ã¢ãŠãã«ããã®ã«é©åãªã¿ã€ãã³ã°ã§ããå¯èœæ§ããããŸãã
æ確ã«ããã @ lucas03ãªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠããäœã§ãããã¯äžæã§ãã äœãç¹å¥ãªããšãå¿ èŠãªå Žåã¯ãã±ãããéããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
@tuukkamustonen
--timeout
ã¯ããªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠããæå³ãããã®ã§ã¯ãããŸããã ããã¯ãåŽåè ã®æŽ»åãã§ãã¯ãç®çãšããŠããŸãã åæã¯ãŒã«ãŒã®å Žåãã¯ãŒã«ãŒã¯ãªã¯ãšã¹ããåŠçãã以å€ã«äœãã§ããªããããããã¯ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠããšããŠæ©èœããŸãã éåæã¯ãŒã«ãŒã¯ãé·æéå®è¡ãããèŠæ±ãåŠçããŠããéã§ãããŒãããŒããå®è¡ãããããã¯ãŒã«ãŒããããã¯/ããªãŒãºããªãéãã匷å¶çµäºãããŸãããä»ã®äººããããæ··ä¹±ãããŠãããšæããå Žåã¯ãååãå€æŽããããšããå§ãããŸãã