Herokuäžã®Djangoã¢ããªã±ãŒã·ã§ã³ã®åã§å®è¡ãããŠããGunicornã§ããªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠãã«é¢ããéåžžã«å¥åŠãªåé¡ãçºçããŠããŸãã
åºæ¬çã«ããã®åé¡ã¯ãã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠéåžžã«é·æéå®è¡ããããªã¯ãšã¹ããè¡ããããšãã«çºçãã30ç§åŸã®Herokuã®ãã©ãããã©ãŒã ã¬ãã«ã®ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠãã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ãåæãããŸãã ããèªäœã¯åé¡ã§ã¯ãããŸããããã®ãããªé·æéå®è¡ããããªã¯ãšã¹ãã¯ã¿ã€ã ã¢ãŠãããã¯ãã§ãã å®éã®åé¡ã¯ãåŸç¶ã®ãªã¯ãšã¹ãã§çºçããŸãã ãã®é·æéå®è¡ããããªã¯ãšã¹ãã®_åŸã«_çºçãããªã¯ãšã¹ãã¯ã次ã®åœ¢åŒã®Gunicornãšã©ãŒãå³åº§ã«ã¹ããŒããå¯èœæ§ãããããã§ãã
[CRITICAL] WORKER TIMEOUT (pid:15)
ããã«ãããå éšãµãŒããŒãšã©ãŒããŒãžãããã«ã¯ã©ã€ã¢ã³ãã«è¿ãããŸãã ãã®åäœã«ã¯äžè²«æ§ããããŸããã次ã®ãªã¯ãšã¹ããæåããå Žåãšå€±æããå ŽåããããŸãã ç§ã®çãã¯ããªã¯ãšã¹ããé·æéå®è¡ãããŠãããªã¯ãšã¹ããåŠçããŠããã®ãšåãGunicornã¯ãŒã«ãŒã«ãã£ãŠåŠçãããå Žåã«ãšã©ãŒãçºçããããšã§ãã
次ã®ããã«ãDjangoããçŽæ¥Gunicornãå®è¡ããŠããŸãã
python app/manage.py run_gunicorn -b 0.0.0.0:$PORT -w 2 -k gevent
worker_connectionsãmax_requestsãªã©ããã®ä»ã®é¢é£ããæ§æãã©ã¡ãŒã¿ãŒã¯ãããã©ã«ãã§èšå®ãããŠããŸãã ãã ãããããã®èšå®ãšã¯ãŒã«ãŒã®æ°ãå€æŽããŠå®éšããŸããããäžèšã®åé¡ã¯ãè©Šè¡ãããã¹ãŠã®ã±ãŒã¹ã§çºçããŸãã çŸåšã®Gunicornã®ããŒãžã§ã³ã¯0.14.6ã§ãåé¡ã®åå ãšãªã£ãå Žåã«åããŠ17.5ã«ã¢ããã°ã¬ãŒãããåŸã«ããŒã«ããã¯ããŸããã æ®å¿µãªãããäž¡æ¹ã®ããŒãžã§ã³ã§åãåäœãçºçããŸãã
ãã®åé¡ã®æ ¹æ¬çãªåå ãç解ããã®ã¯éåžžã«å°é£ã§ãã äžèšã®ãªã³ã¯å ã®Herokuããã¥ã¡ã³ãããïŒ
ã«ãŒã¿ãŒãã¯ã©ã€ã¢ã³ãã«å¿çãè¿ããŠããéãã¢ããªã±ãŒã·ã§ã³ã¯åŠçäžã®èŠæ±ãã¿ã€ã ã¢ãŠãã«éããããšãèªèãããã¢ããªã±ãŒã·ã§ã³ã¯åŒãç¶ãèŠæ±ãåŠçããŸãã
ããã¯ãå ã®é·æéå®è¡ãªã¯ãšã¹ããã¯ã©ã€ã¢ã³ãã®èŠ³ç¹ããã¿ã€ã ã¢ãŠãããã«ãããããããGunicornã¯ãŒã«ãŒããŸã ãªã¯ãšã¹ããåŠçããŠããããšãæå³ããŠãããšæããŸãã ç§ãå°æãããŠããã®ã¯ãã¯ãŒã«ãŒãgeventã䜿çšããŠãããããéåæã¹ã¬ããã䜿çšããŠãªã¯ãšã¹ããåŠçããŠããå Žåãããã«ãããæ°ããåŸç¶ã®ãªã¯ãšã¹ããã¯ãŒã«ãŒã¿ã€ã ã¢ãŠããããã«ã¹ããŒããæ¹æ³ã§ãã æåã®é·æçãªãªã¯ãšã¹ãã¯
é·æéå®è¡ããããªã¯ãšã¹ããPostgreSQLããŒã¿ããŒã¹ã«æ¥ç¶ããããã€ãã®è€éãªã¯ãšãªãå®è¡ããŠããããšã¯èšåãã䟡å€ããããããããŸããã ã¯ã©ãã·ã¥ã¯ãDBãšã®ã€ã³ã¿ãŒãã§ãŒã¹äžã«Herokuã®ãããã§ãé·æéå®è¡ãããŠããæ¥ç¶ãã¿ã€ã ã¢ãŠãããåŸã«ã®ã¿çºçããããã§ãã ãã¹ããµãŒããŒã§ããããã¹ãããããã«ã2ã€ã®å¥ã ã®ãã¥ãŒãäœæããŸããã1ã€ã¯Herokuã¿ã€ã ã¢ãŠãã«éãããŸã§ããŒã¿ããŒã¹ã«å¯ŸããŠé·ãã¯ãšãªãå®è¡ãããã1ã€ã¯Herokuã¿ã€ã ã¢ãŠããçæããããã«30ç§ãè¶ ããŠåŸ æ©ããã ãã§ãã åè ã®ãã¥ãŒã§ã¯ã次ã®ãªã¯ãšã¹ãã§Gunicornã¯ãŒã«ãŒã®ã¿ã€ã ã¢ãŠããçºçããå¯èœæ§ããããŸãããããã¹ãªãŒãããã¥ãŒã§ã¯çºçããŸããã§ããã
誰ãããã®åé¡ãåŒãèµ·ãããŠããæ ¹æ¬çãªæ¯ãèãã«ã€ããŠäœãæŽå¯ãæã£ãŠãããªãçŽ æŽãããã§ããã-åé¡ã蚺æããã®ãå©ããããã«ç§ãæäŸã§ããè¿œå æ å ±ãããã°ãç§ã«ç¥ãããŠãã ããã ããããã®ãããªåé¡ãåŠçããæ£ããæ¹æ³ã§ããããããŸã§ã«æèµ·/察åŠãããããšããªãããšãé¡ã£ãŠããŸãã
@Jwpeåªãããã°ã¬ããŒãã
ç§ãæåã«èª¿ã¹ãããšã¯ãã°ãªãŒã³åãããPostgreSQLãã©ã€ããŒã䜿çšããŠãããã©ããã§ãã ãããæ£ããæ©èœãããã«ã¯ãã¢ã³ããŒãããã§äœ¿çšããå¿ èŠã®ããç¹å®ã®ããŒãžã§ã³ããããŸããã ä»ã®ç¶æ³ã¯ããããŸããã ãã ãã貌ãä»ããã¿ã€ã ã¢ãŠãã¯ã¯ãŒã«ãŒã¿ã€ã ã¢ãŠãã§ãããéåæã¯ãŒã«ãŒã®1ã€ã§ã¯ãåºæ¬çã«ãã°ãªãŒã³ã¬ããã$ timeoutç§ãè¶ ããŠçæãããŠããªãããšããçµæã«ãªããŸãã é·æéå®è¡ãããPostgreSQLãªã¯ãšã¹ãã«ã€ããŠèª¬æããŠããããšãèãããšããããç§ãæåã«èª¿æ»ããå Žæã§ãã
@davispããã«å¯Ÿããè¿ éãªå¯Ÿå¿ã«æè¬ããŸãïŒ
ããªãã®ãã€ã³ã¿ã«ç¶ããŠãç§ã¯psycopg2ã¢ããã¿ãŒïŒDjangoã¢ããªãPostgresã«æ¥ç¶ããããã«äœ¿çšããŸãïŒãèŠãŠã次ã®ããã«èšèŒãããŠããããã¥ã¡ã³ãã®ãã®ã»ã¯ã·ã§ã³ãçºèŠããŸããã
èŠåïŒPsycopgæ¥ç¶ã¯ã°ãªãŒã³ã¹ã¬ããã»ãŒãã§ã¯ãªããç°ãªãã°ãªãŒã³ã¹ã¬ããã§åæã«äœ¿çšããããšã¯ã§ããŸããã ã¹ã¬ããããšã«1ã€ã®ã«ãŒãœã«ã䜿çšããŠäžåºŠã«è€æ°ã®ã³ãã³ããå®è¡ããããšãããšããšã©ãŒïŒãŸãã¯2.4.2ããåã®ããŒãžã§ã³ã§ã¯ãããããã¯ïŒãçºçããŸãã
ãããã£ãŠãããã°ã©ããŒã¯ãã³ã«ãŒãã³éã§æ¥ç¶ãå ±æããªãããã«ããããã©ã€ãã©ãªãŒã«é©ããããã¯ã䜿çšããŠãããŒã«ãªã©ã®å ±ææ¥ç¶ãåæããããšããå§ãããŸãã
èšãæããã°ãpsycopg2ã¯ã°ãªãŒã³ã¹ã¬ããã奜ãã§ã¯ãããŸããã ç§ãã¡ãééããåäœã«åºã¥ããŠãããããšã©ãŒã®åå ã§ãããšæšæž¬ããŸãã psycopgã®ããã¥ã¡ã³ãã«ãããšããã®åé¡ã«å¯ŸåŠããããã®æšå¥šãããæ¹æ³ã¯ãã³ã«ãŒãã³ã®psycopgãµããŒããæå¹ã«ããã©ã€ãã©ãªã䜿çšããããšã§ãã æšå¥šãããã©ã€ãã©ãªã¯psycogreenã§ãã
psycogreenã©ã€ãã©ãªã䜿çšããŠãã¹ããµãŒããŒã§åé¡ãåçŸããåé¡ã解決ãããã©ããã確èªããŸãã ããŸãããã°ãç§ã¯æ¯èŒçæ©ãããã€ãã®çµæãå ±åããããšãã§ããã¯ãã§ãã
@Jwpeããã¯ç§ãèŠããŠããããã¯ã®ããã«èŠããŸãã
@benoitcãããããGunicornã®ããã¥ã¡ã³ãã®ã©ããã§ãããåŒã³åºãå¿ èŠããããŸããïŒ ããããæé«ã®å Žæãã©ãã«ããã®ãå®å šã«ã¯ããããŸããã
@davispå€åFAQã»ã¯ã·ã§ã³ã«ãããŸããïŒ
hmppff forgiotã¯ãã§ã«ååšããŠããŸããïŒhttp://docs.gunicorn.org/en/latest/faq.htmlïŒãããã£ãŠãããããããã©ãã«ã·ã¥ãŒãã£ã³ã°ãã»ã¯ã·ã§ã³ãžã®ãªã³ã¯ãäœæã§ããå¯èœæ§ããããŸãã 確ãã§ã¯ãããŸããããvirtualenvããã®ä»ã®ããªãã¯ã«é¢ããæ å ±ããã®ãããªã»ã¯ã·ã§ã³ã«ç§»åããããšãã§ããŸãã
ãã¶ããèŠåãŸãã¯ãã°ãªãŒã³ã¹ã¬ããã«é¢ãã泚æãããŒãžã ã¹ãŒããŒãã¬ã¹ã§ã¯ãããŸããã
geventã¯ãŒã«ãŒãšä»ã®ããã€ãã®gunicornãå®è¡ããŠããHerokuã§ã»ãŒåãåäœãèŠãããã®ã§ããã®ã¹ã¬ããã§æšå¥šãããŠããããã«åæã¯ãŒã«ãŒã«åãæ¿ããŸããããåºæ¬çã«åãæ·±å»ãªåé¡ãçºçããŠããŸããã H12ã®30ç§ã®Herokuã«ãããªããååŸããdynoå
šäœããªã»ãããããŸã§ïŒå Žåã«ãã£ãŠã¯1æé以äžåŸããŸãã¯max-requestsãããããããŸã§ïŒãH12ãš[CRITICAL] Worker Timeout
ãšã©ãŒãç¹°ãè¿ããŸããã ããã§ãgunicornã®ã¿ã€ã ã¢ãŠãã28ç§ã«èª¿æŽããŠãHerokuãã¿ã€ã ã¢ãŠãããåã«ã¿ã€ã ã¢ãŠãããããã«ããŸããã åãïŒãŸãã¯éåžžã«ãã䌌ãïŒåé¡ã1æ¥ã«1ã2åçºçãããã¹ã¿ãŒããã»ã¹ãåèµ·åããããŸã§ç¶ããŸããä»åã¯ãgunicornãåæããŠãããããH13ïŒæ¥ç¶ãéããããŠããïŒã§å§ãŸããŸãã ãããã®æéäžããã©ãã£ãã¯ã«å€§ããªã¹ãã€ã¯ã¯ãããŸããã
ãããç§ã®çŸåšã®procfileãšã³ããªã§ãïŒ
web: newrelic-admin run-program gunicorn publisher.wsgi -b 0.0.0.0:$PORT -w 4 --max-requests 1000 --timeout 28 --preload
äžé£ã®ã€ãã³ãã®è©³çŽ°ïŒ
æåã«ãéåžžã«é·ãæéïŒ5ç§ä»¥äžïŒãããããã«èŠããããã€ãã®ãªã¯ãšã¹ããåãåãã次ã«ãªã¯ãšã¹ããH12ã¿ã€ã ã¢ãŠãã§å€±æãïŒã¯ãŒã«ãŒã¿ã€ã ã¢ãŠãããããé®æãïŒãããã«ããã€ãã®ãªã¯ãšã¹ããçµäºããŸãããéåžžã«é·ãæéïŒ20ç§ïŒã ãã以éã¯ãdynoãåèµ·åãããŸã§ãçŽç²ãªH1130ç§ã®herokuã«ãããªãã§ãã
WebãµãŒããŒïŒpython / djangoãå®è¡ïŒãšããŠgunicornïŒv 18.0ïŒã䜿çšããŸãã
newrelicãå®è¡ããŸããããã¯ãããŠã³ã¿ã€ã ãšãã¡ããã¡ãé«ããªã¯ãšã¹ããã¥ãŒã€ã³ã°æéã瀺ããŠããŸãããä»ã®æŽå¯ã¯æäŸããŠããŸããã NRã§ç¢ºèªã§ããã¹ã«ãŒãããã®æ¥äžæããã®ä»ã®ç°åžžãªç¶æ ã¯ãããŸããã§ããã ãã°åŠçãšãšã©ãŒã¡ãŒã«ã®éä¿¡ã«ã¯ããŒããŒãã¬ã€ã«ã䜿çšããŸãã
Oct 15 15:08:53 nutrislice-stockton heroku/router: at=info method=GET path=/marketingtools/api/slides/?format=json-p&callback=_jqjsp&_1381871332239= host=oldham.nutrislice.com fwd="74.138.24.95" dyno=web.2 connect=15ms service=216ms status=200 bytes=21
Oct 15 15:08:54 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/menutypes/?format=json-p&callback=_jqjsp&_1381871332232= host=oldham.nutrislice.com fwd="74.138.24.95" dyno=web.2 connect=2ms service=90ms status=200 bytes=231
Oct 15 15:08:56 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/schools/?format=json-p&callback=_jqjsp&_1381871323514= host=oldham.nutrislice.com fwd="74.138.24.95" dyno=web.2 connect=3ms service=94ms status=200 bytes=5986
Oct 15 15:09:03 nutrislice-stockton heroku/router: at=info method=HEAD path=/heartbeat/ host=stockton.nutrislice.com fwd="54.247.188.179" dyno=web.2 connect=3ms service=23ms status=200 bytes=0
Oct 15 15:09:13 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/settings/?format=json-p&callback=_jqjsp&_1381871237946= host=pcsb.nutrislice.com fwd="66.87.110.127" dyno=web.2 connect=5ms service=166ms status=200 bytes=468
Oct 15 15:09:20 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/settings/?format=json-p&callback=_jqjsp&_1381871323611= host=oldham.nutrislice.com fwd="74.138.24.95" dyno=web.2 connect=6ms service=183ms status=200 bytes=453
Oct 15 15:09:40 nutrislice-stockton heroku/router: at=info method=GET path=/ host=nps.nutrislice.com fwd="74.190.240.28" dyno=web.2 connect=1ms service=260ms status=200 bytes=35951
Oct 15 15:09:55 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/api/list/school-menu-profile/87/menu-type/43/?format=json-p&callback=jQuery18008709754704032093_1381871379465&_=1381871393589 host=nps.nutrislice.com fwd="74.190.240.28" dyno=web.2 connect=15ms service=129ms status=200 bytes=400
Oct 15 15:09:55 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/api/list/school-menu-profile/306/menu-type/187/?format=json-p&callback=jQuery180013075259909965098_1381873891397&_=1381873896600 host=sdhc.nutrislice.com fwd="72.186.96.121" dyno=web.2 connect=2ms service=33ms status=200 bytes=486
Oct 15 15:10:00 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/186/?smp=257 host=coppellisd.nutrislice.com fwd="76.199.114.157" dyno=web.2 connect=7ms service=103ms status=200 bytes=323
Oct 15 15:10:00 nutrislice-stockton app/web.2: INFO http://stockton.nutrislice.com/heartbeat/ Pinged from IP: 10.190.159.205 -- AGENT: NewRelicPinger/1.0 (269661)
Oct 15 15:10:00 nutrislice-stockton heroku/router: at=info method=HEAD path=/heartbeat/ host=stockton.nutrislice.com fwd="50.112.95.211" dyno=web.2 connect=1ms service=10ms status=200 bytes=0
Oct 15 15:10:09 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/239/?smp=341 host=edenpr.nutrislice.com fwd="75.73.177.139" dyno=web.2 connect=8ms service=334ms status=200 bytes=277
Oct 15 15:10:16 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/395/?smp=306 host=sdhc.nutrislice.com fwd="72.186.96.121" dyno=web.2 connect=1ms service=96ms status=200 bytes=245
Oct 15 15:10:20 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/391/?smp=305 host=sdhc.nutrislice.com fwd="173.170.34.126" dyno=web.2 connect=32ms service=5207ms status=200 bytes=290
Oct 15 15:10:22 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/350/?smp=305 host=sdhc.nutrislice.com fwd="173.170.34.126" dyno=web.2 connect=60ms service=7676ms status=200 bytes=1147
Oct 15 15:10:31 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/258/?smp=341 host=edenpr.nutrislice.com fwd="75.73.177.139" dyno=web.2 connect=42ms service=517ms status=200 bytes=26974
Oct 15 15:10:43 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/schools/?format=json-p&callback=_jqjsp&_1381871432885= host=ocps.nutrislice.com fwd="71.47.21.97" dyno=web.2 connect=1490ms service=9883ms status=200 bytes=1565
Oct 15 15:10:52 nutrislice-stockton heroku/router: at=error code=H13 desc="Connection closed without response" method=GET path=/ host=jordandistrict.nutrislice.com fwd="71.199.48.37" dyno=web.2 connect=1959ms service=29230ms status=503 bytes=0
Oct 15 15:10:52 nutrislice-stockton app/web.2: 2013-10-15 21:10:50 [2] [CRITICAL] WORKER TIMEOUT (pid:12)
Oct 15 15:10:52 nutrislice-stockton app/web.2: 2013-10-15 21:10:50 [2] [CRITICAL] WORKER TIMEOUT (pid:12)
Oct 15 15:10:52 nutrislice-stockton app/web.2: 2013-10-15 21:10:50 [26] [INFO] Booting worker with pid: 26
Oct 15 15:10:52 nutrislice-stockton app/web.2: 2013-10-15 21:10:50,930 (26/MainThread) newrelic.core.agent INFO - New Relic Python Agent (2.0.0.1)
Oct 15 15:10:54 nutrislice-stockton heroku/router: at=info method=GET path=/surveys/api/activesurveycount/?format=json-p&callback=_jqjsp&_1381871433429= host=henrico.nutrislice.com fwd="96.248.5.53" dyno=web.2 connect=1181ms service=20074ms status=200 bytes=32
Oct 15 15:10:55 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/schooltypes/?format=json-p&callback=_jqjsp&_1381871433374= host=henrico.nutrislice.com fwd="96.248.5.53" dyno=web.2 connect=1136ms service=20393ms status=200 bytes=142
Oct 15 15:11:01 nutrislice-stockton app/web.2: using heroku production settings
Oct 15 15:11:01 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
Oct 15 15:11:01 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:11:01 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/settings/?format=json-p&callback=_jqjsp&_1381871432922= host=ocps.nutrislice.com fwd="71.47.21.97" dyno=web.2 connect=1435ms service=23198ms status=200 bytes=486
Oct 15 15:11:03 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/conf/urls/defaults.py:3: DeprecationWarning: django.conf.urls.defaults is deprecated; use django.conf.urls instead
Oct 15 15:11:03 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:11:05 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/schooltypes/?format=json-p&callback=_jqjsp&_1381871443300= host=martinschools.nutrislice.com fwd="99.114.229.202" dyno=web.2 connect=1089ms service=20040ms status=200 bytes=268
Oct 15 15:11:10 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/weeks/school-menu-profile/135/menu-type/63/2013/10/14/?format=json-p&callback=_jqjsp&_1381871439548= host=henrico.nutrislice.com fwd="96.248.5.53" dyno=web.2 connect=1018ms service=30001ms status=503 bytes=0
Oct 15 15:11:15 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/sales/?format=json-p&callback=_jqjsp&_1381871443267= host=martinschools.nutrislice.com fwd="99.114.229.202" dyno=web.2 connect=1096ms service=30001ms status=503 bytes=0
Oct 15 15:11:15 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/schools/?format=json-p&callback=_jqjsp&_1381871443296= host=martinschools.nutrislice.com fwd="99.114.229.202" dyno=web.2 connect=1108ms service=30000ms status=503 bytes=0
Oct 15 15:11:23 nutrislice-stockton heroku/router: at=info method=GET path=/menu/api/weeks/school-menu-profile/48/menu-type/21/2013/10/14/?format=json-p&callback=_jqjsp&_1381871449451= host=martinschools.nutrislice.com fwd="99.114.229.202" dyno=web.2 connect=1114ms service=31756ms status=200 bytes=48771
Oct 15 15:11:26 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/sales/?format=json-p&callback=_jqjsp&_1381871455129= host=pcsb.nutrislice.com fwd="66.87.110.127" dyno=web.2 connect=990ms service=30001ms status=503 bytes=0
Oct 15 15:11:26 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/schools/?format=json-p&callback=_jqjsp&_1381871455291= host=pcsb.nutrislice.com fwd="66.87.110.127" dyno=web.2 connect=1028ms service=30008ms status=503 bytes=0
Oct 15 15:11:31 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menuwidgets/179/?smp=6 host=cusdnutrition.nutrislice.com fwd="68.99.246.16" dyno=web.2 connect=2492ms service=30000ms status=503 bytes=0
Oct 15 15:11:32 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menuwidgets/192/?smp=6 host=cusdnutrition.nutrislice.com fwd="68.99.246.16" dyno=web.2 connect=2713ms service=30003ms status=503 bytes=0
Oct 15 15:11:39 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/ host=hebisd.nutrislice.com fwd="38.107.226.1" dyno=web.2 connect=2115ms service=30001ms status=503 bytes=0
Oct 15 15:11:45 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/weeks/school-menu-profile/44/menu-type/19/2013/10/14/?format=json-p&callback=_jqjsp&_1381871472583= host=pcsb.nutrislice.com fwd="66.87.110.127" dyno=web.2 connect=2168ms service=30000ms status=503 bytes=0
Oct 15 15:11:48 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/marketingtools/api/active-announcements/?format=json-p&callback=_jqjsp&_1381871476287= host=sdhc.nutrislice.com fwd="65.34.72.116" dyno=web.2 connect=1927ms service=30000ms status=503 bytes=0
Oct 15 15:11:48 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/surveys/api/activesurveycount/?format=json-p&callback=_jqjsp&_1381871476543= host=sdhc.nutrislice.com fwd="65.34.72.116" dyno=web.2 connect=2117ms service=30000ms status=503 bytes=0
Oct 15 15:11:48 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/schooltypes/?format=json-p&callback=_jqjsp&_1381871476481= host=sdhc.nutrislice.com fwd="65.34.72.116" dyno=web.2 connect=2111ms service=30009ms status=503 bytes=0
Oct 15 15:11:50 nutrislice-stockton app/web.2: 2013-10-15 15:11:32,597 (26/NR-Activate-Session/nutrislice-stockton) newrelic.core.data_collector INFO - Successfully registered New Relic Python agent where app_name='nutrislice-stockton', pid=26, redirect_host='collector-2.newrelic.com' and agent_run_id=474482914, in 40.26 seconds.
Oct 15 15:11:50 nutrislice-stockton app/web.2: INFO Successfully registered New Relic Python agent where app_name='nutrislice-stockton', pid=26, redirect_host='collector-2.newrelic.com' and agent_run_id=474482914, in 40.26 seconds.
Oct 15 15:11:52 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/marketingtools/api/active-announcements/?format=json-p&callback=_jqjsp&_1381871480294= host=sdhc.nutrislice.com fwd="65.34.72.116" dyno=web.2 connect=1689ms service=30006ms status=503 bytes=0
Oct 15 15:11:55 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/settings/?format=json-p&callback=_jqjsp&_1381871482566= host=henrico.nutrislice.com fwd="72.84.233.45" dyno=web.2 connect=2067ms service=30004ms status=503 bytes=0
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:41 [2] [CRITICAL] WORKER TIMEOUT (pid:26)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:41 [2] [CRITICAL] WORKER TIMEOUT (pid:26)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:41 [29] [INFO] Booting worker with pid: 29
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:41,067 (29/MainThread) newrelic.core.agent INFO - New Relic Python Agent (2.0.0.1)
Oct 15 15:11:57 nutrislice-stockton app/web.2: using heroku production settings
Oct 15 15:11:57 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
Oct 15 15:11:57 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:44 [2] [CRITICAL] WORKER TIMEOUT (pid:23)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:44 [2] [CRITICAL] WORKER TIMEOUT (pid:23)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:44 [32] [INFO] Booting worker with pid: 32
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:44,154 (32/MainThread) newrelic.core.agent INFO - New Relic Python Agent (2.0.0.1)
Oct 15 15:11:57 nutrislice-stockton app/web.2: using heroku production settings
Oct 15 15:11:57 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
Oct 15 15:11:57 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:48 [2] [CRITICAL] WORKER TIMEOUT (pid:14)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:48 [2] [CRITICAL] WORKER TIMEOUT (pid:14)
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:48 [35] [INFO] Booting worker with pid: 35
Oct 15 15:11:57 nutrislice-stockton app/web.2: 2013-10-15 21:11:48,273 (35/MainThread) newrelic.core.agent INFO - New Relic Python Agent (2.0.0.1)
Oct 15 15:11:57 nutrislice-stockton app/web.2: using heroku production settings
Oct 15 15:11:57 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
Oct 15 15:11:57 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:11:57 nutrislice-stockton heroku/router: at=info method=GET path=/menuwidgets/353/?smp=306 host=sdhc.nutrislice.com fwd="72.186.96.121" dyno=web.2 connect=21ms service=76ms status=200 bytes=255
Oct 15 15:12:00 nutrislice-stockton app/web.2: 2013-10-15 21:11:54 [2] [CRITICAL] WORKER TIMEOUT (pid:13)
Oct 15 15:12:00 nutrislice-stockton app/web.2: 2013-10-15 21:11:54 [2] [CRITICAL] WORKER TIMEOUT (pid:13)
Oct 15 15:12:00 nutrislice-stockton app/web.2: 2013-10-15 21:11:54 [38] [INFO] Booting worker with pid: 38
Oct 15 15:12:00 nutrislice-stockton app/web.2: 2013-10-15 21:11:54,388 (38/MainThread) newrelic.core.agent INFO - New Relic Python Agent (2.0.0.1)
Oct 15 15:12:00 nutrislice-stockton app/web.2: using heroku production settings
Oct 15 15:12:01 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
Oct 15 15:12:01 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:12:02 nutrislice-stockton app/web.2: WARNING /app/.heroku/python/lib/python2.7/site-packages/django/conf/urls/defaults.py:3: DeprecationWarning: django.conf.urls.defaults is deprecated; use django.conf.urls instead
Oct 15 15:12:02 nutrislice-stockton app/web.2: DeprecationWarning)
Oct 15 15:12:03 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menuwidgets/353/?smp=306 host=sdhc.nutrislice.com fwd="108.9.154.78" dyno=web.2 connect=3650ms service=30006ms status=503 bytes=0
Oct 15 15:12:03 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menuwidgets/395/?smp=306 host=sdhc.nutrislice.com fwd="108.9.154.78" dyno=web.2 connect=3581ms service=30006ms status=503 bytes=0
Oct 15 15:12:06 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/settings/?format=json-p&callback=_jqjsp&_1381871492466= host=canyonsdistrict.nutrislice.com fwd="174.52.155.49" dyno=web.2 connect=3582ms service=30001ms status=503 bytes=0
Oct 15 15:12:09 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/mobile/api_version/?deviceType=iphone host=pasco.nutrislice.com fwd="173.65.148.9" dyno=web.2 connect=3837ms service=30004ms status=503 bytes=0
Oct 15 15:12:11 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/mobile/api_version/?deviceType=iphone host=canyonsdistrict.nutrislice.com fwd="174.52.155.49" dyno=web.2 connect=3987ms service=30001ms status=503 bytes=0
Oct 15 15:12:11 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/schools/?format=json-p&callback=_jqjsp&_1381871497105= host=canyonsdistrict.nutrislice.com fwd="174.52.155.49" dyno=web.2 connect=3962ms service=30001ms status=503 bytes=0
Oct 15 15:12:11 nutrislice-stockton heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/menu/api/menutypes/?format=json-p&callback=_jqjsp&_1381871497128= host=canyonsdistrict.nutrislice.com fwd="174.52.155.49" dyno=web.2 connect=4020ms service=30007ms status=503 bytes=0
ãããŠããã®H12ã¿ã€ã ã¢ãŠããš[CRITICAL] WORKER TIMEOUTã®ãæ»ã®ã¹ãã€ã©ã«ãã¯ããã¹ã¿ãŒããã»ã¹ãåéããããŸã§ç¶ããŸãã
ãããåãåé¡ãªã®ããå¥ã®åé¡ãªã®ããäœãèãã¯ãããŸããïŒ ä¿®æ£ããææ¡ã¯ãããŸããïŒ gunicornã¯ã¿ã€ã ã¢ãŠãåŸã«ã¯ãŒã«ãŒããã»ã¹ã匷å¶çµäºããæ°ããéå§ããã®ã§ãéåžžã©ããåŠçãéå§ã§ãããšæããŸããããã®åŸã¯ãªã¯ãšã¹ããå±ããªãããã§ãã å€åããã¯Herokuã®åé¡ã§ãã
ïŒ+1ïŒãã®åé¡ãèŠãããŸãã
Herokuã§ããã®åé¡ãçºçããŠããŸã
@sprynmr @richardkeen gunicornãèµ·åããæ¹æ³ãšãã§ãããã°ãå ±æã§ããŸããïŒ åé¡ã解決ããã®ã«å€§ãã«åœ¹ç«ã¡ãŸãã
@nebstreborãªã¯ãšã¹ãã®æ°ãå¶éããªãå Žåã¯ã©ããªããŸããïŒ
ç§ãã¡ã¯æ¬¡ã®ããã«ãããç«ã¡äžããŠããŸããïŒ
web: newrelic-admin run-program python manage.py run_gunicorn -b "0.0.0.0:$PORT" --log-level=DEBUG -w 3 -k gevent --max-requests 250
ãã°ã¬ãã«ã®DEBUGã䜿çšããŠããäœãèµ·ãã£ãŠãããã«ã€ããŠã®ãã°ã®éªéã«ãªãããšã¯ããŸããããŸããã§ããã gevent
ã䜿çšããªãããšã§ãä»ã®ãšããåé¡ã¯è§£æ±ºããŸããããçæ³çã§ã¯ãããŸããã
@sprynmrãªã¯ãšã¹ãã®æ倧æ°ãåé€ãããšã©ããªããŸããïŒ ãŸããgeventã®ã©ã®ããŒãžã§ã³ã§ããïŒ
ç§ãã¡ã¯1.0rc2
ã ãªã¯ãšã¹ãã®æ倧æ°ãããããªãã ä»ã®ãšãããæ¬çªç°å¢ã§åã³ãªã³ã«åãæ¿ãããã¯ãããŸããã
ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠãã«é¢ããHerokuããŒãžãèªãã§ãã¢ããªã±ãŒã·ã§ã³ã¿ã€ã ã¢ãŠãwell under 30 seconds, such as 10 or 15
ãèšå®ããããšãææ¡ããŠããŸãã gunicornã®timeoutãã©ã¡ãŒã¿ãŒã䜿çšããŠææ¡ãè©ŠããŸãããïŒ
ãšã«ãããgeventã§çºçããåé¡ã¯ãããããæ¥ç¶ã®åŠçæ¹æ³ãåå ã§ãã ã¯ãŒã«ãŒã®çŸåšã®ããŒãžã§ã³ã¯ããã®ã°ãªãŒã³ã¬ããã®å®éã®ç£èŠãªãã«ãã°ãªãŒã³ã¬ãã/åãå ¥ããããæ¥ç¶ãçæããŠããŸãã ããããçºçããã®ã¯ãåãå ¥ãããããœã±ããã®1ã€ãé·æéåŸ æ©ããä»ã®ã€ãã³ããåŠçãããªããããgunicornã¯ãŒã«ãŒãåèµ·åããããšã§ãã ããããç§ã¯ãã§ãã¯ããå¿ èŠããããŸãã
é¢çœãã ããããè©ŠããŸããã§ããã
ïŒ+1ïŒããã¯ç§ã®ã¢ããªã±ãŒã·ã§ã³ã§ãèŠãããŸãã @Jwpe / @sprynmrãã®åé¡ã®è§£æ±ºçã«å°éããããšã¯ãããŸããïŒ ãã®åé¡ã«é¢ããã¢ã¯ãã£ããã£ãçºçããŠãã2ãæ以äžçµéããŠããããã§ãã åé¡ã«å¯ŸåŠããããã®äœããèŠã€ããå Žåã¯ããã²ãèãããã ããã
ããããšãïŒ
@dencoldã¯https://github.com/benoitc/gunicorn/issues/588#issuecomment-29267541ãè©ŠããŸããã
ç§ã¯herokuã«ã¢ã«ãŠã³ããæã£ãŠããªãã®ã§ããããäœãããã®ãããããŸããã ãŸããåããã°ããããŸããïŒ
ããã«ã¡ã¯@benoitc ãè¿ éãªå¯Ÿå¿ã«æè¬ããŸãã ãã°ã¯ã @ Jwpeããã³@nebstreborãå ±åãããã®ãšãŸã£ããåãã§ãã åé¡ãç¹å®ããã®ã«åœ¹ç«ã€å Žåã¯ãé¢é£ããããããåãåºããŠããã«è¿œå ããŠãã ããããç¥ãããã ããã
以åã®ã³ã¡ã³ãããã¢ããã€ã¹ãåãåããgunicornã®ã¿ã€ã ã¢ãŠããherokuã«ãŒã¿ãŒã®ã¿ã€ã ã¢ãŠããããäœããªãããã«æ§æããŠãããã圹ç«ã€ãã©ããã確èªããŸãã ææ¡ãããããšãã
ãã®ã«ã¹ã±ãŒãé害ã®å®éã®åå ãèŠã€ããããšã¯åœ¹ã«ç«ã¡ãŸãã 1人ã®ã¯ãŒã«ãŒã倱æããgunicornãµãŒããŒå šäœãå®å šã«å¿çããªããªãã®ãèŠãã®ã¯æ¬åœã«å¥åŠã§ãã 蚺æã«åœ¹ç«ã€ããšãããã°æããŠãã ããã ãã®ã¿ã€ã ã¢ãŠããããŒã«ã«ã§åçŸããããšã¯ã§ããŸããã ããã¯ãherokuã€ã³ãã©ã¹ãã©ã¯ãã£ã§ã®ã¿çºçããããã§ãã
ç³ãèš³ãããŸããã@dencoldç§ã¯è§£æ±ºçãèŠã€ããããŸãã
@dencoldãæ°ããéºç©ã䜿çšããŠããŸããïŒ
@benoitcãããç§ãã¡ã¯æ°ããéºç©ã䜿ã£ãŠããŸãã
@dencoldãåæ§ã«ããã®åé¡ãæ£åžžã«è§£æ±ºããããšã¯ã§ããŸããã§ããã ãšã©ãŒã®åå ãçªãæ¢ããããã«æè³ããæéããªããå ã®ãªã¯ãšã¹ãã®æéãççž®ããããšã«éäžããå¿ èŠããããŸããã ãã ãããšã©ãŒã®é倧ãªæ§è³ªïŒãŠãŒã¶ãŒãçŽé¢ããŠããããïŒã«ãããæ«å®çã«åé¡ãåé¿ããããã«WSGIãµãŒããŒãåãæ¿ããããšã«ãªããŸããã ãããã£ãŠãåé¡ãããã«åé¡ããããã®å®éšã¯ãã以äžå®è¡ããŠããŸããã
@Jwpeã¯ãå°ãªããšãææ¡ããããœãªã¥ãŒã·ã§ã³ãè©ŠããŸãããïŒ ãŸããçµæã¯å¥åŠã§ãgunicornã ãã§ãããåçŸããããšã¯æ±ºããŠãããŸããã
ã«ãããªãæéã15ç§ã«ççž®ãããŸãããããŸã åé¡ãçºçããŠããŸãã
2014幎1æ26æ¥ïŒæ¥ææ¥ïŒã«ã¯ãããã¯Chesneau [email protected]
æžããŸããïŒ
@Jwpehttps ïŒ//github.com/Jwpeå°ãªããšãææ¡ããããã®ãè©ŠããŸããã
è§£æ±ºïŒ ãŸããçµæã¯å¥åŠã§ãgunicornã§ãããåçŸããããšã¯ãããŸãã
ããèªäœã§ãâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/benoitc/gunicorn/issues/588#issuecomment-3331633ã§è¡šç€ºããŠãã ãã
ã
ãã³ãããŒã
CTO
NutrisliceãIncã
866-524-3444å
ç·702
[email protected]
@Jwpe / @nebstreborãã®åé¡ã«ã€ããŠãèª ã«ããããšã
@benoitcææ¡ãããã¿ã€ã ã¢ãŠããœãªã¥ãŒã·ã§ã³ãherokuã€ã³ã¹ã¿ã³ã¹ã«å®è£ ããŸããã ä»åŸæ°æ¥éãããã泚ææ·±ãç£èŠããŸãã æ°ããã¿ã€ã ã¢ãŠããèšå®ãããåŸã«åãåé¡ããããã¢ããããã®ã確èªããå Žåã¯ãæçš¿ããŸãã
å©ããŠãããã¿ããªã«ããäžåºŠæè¬ããŸãã ãã®åé¡ãçºçããŠããã®ã¯ç§ã ãã§ã¯ãªãããšãç¥ã£ãŠãããšããã§ãããã ç§ãã¡ãåå ã®æ ¹åºã«å°éã§ããããšãé¡ã£ãŠããŸãã
@benoitcã¯ãã¿ã€ã ã¢ãŠããèšå®ãããŠããçŽ2é±éãçµéããããšãå ±åãããã£ãã ãã§ãã ã¯ãŒã«ãŒã®ã¿ã€ã ã¢ãŠããããã€ãèŠãããŸããããgunicornããã»ã¹å šäœãå¿çããªããªãåå ã¯ãããŸããã ããã§åé¡ã¯è§£æ±ºããããã§ããããããããªã30ç§ã®ã¿ã€ã ã¢ãŠããã«ã¹ã±ãŒããšã©ãŒãåŒãèµ·ãããŠããã®ãã¯ããããŸããã
æçš¿ãç¶ãããã£ãã ãã§ãã ããã§ãã¹ãŠã®å©ããããããšãïŒ
RaspberryPIã§gunicornã䜿çšããŠDjangoãå®è¡ãããšåã[CRITICAL] WORKERTIMEOUTãšã©ãŒãçºçããŸãã
ãã¥ãŒã¹ã¯ãããŸããã
åã[ã¯ãªãã£ã«ã«]ã¯ãŒã«ãŒã¿ã€ã ã¢ãŠããçºçããŸãã
åé¡ã¯ãã¯ãŒã«ãŒã®å®éã®ã¿ã€ã ã¢ãŠãïŒé·ããªã¯ãšã¹ãïŒã®åŸãgunicornãã¯ãŒã«ãŒã匷å¶çµäºããŠæ°ããã¯ãŒã«ãŒãçæããããšããŸãããæ°ããã¯ãŒã«ãŒãTIMEOUTå¶éå
ã§éå§ã§ããã芪ããã»ã¹ã«éç¥ããå Žæã«å°éããªãããšã§ããã©ã€ããªã®ã§ãgunicornã¯äœåºŠãäœåºŠãããã殺ããŸã:(ãç§ãã¡ã®å Žåãåé¡ã¯GeventãšSentryã«é¢é£ããŠããŸããïŒhttps://github.com/getsentry/raven-python/issues/305ïŒãSentryã¯èµ·åæã«ãã³ã°ããŸãã
ãšããã§ãã¯ãŒã«ãŒã®éå§æéãšããã¿ã€ã ã¢ãŠããæéå
ã«éå§ã§ããªãã¯ãŒã«ãŒå
ã®ããã€ãã®è¿œå ãã°ã«å¥ã
ã®ã¿ã€ã ã¢ãŠããèšå®ãããšäŸ¿å©ã§ãã
ã¿ã€ã ã¢ãŠãã¯ãåæã¯ãŒã«ãŒãé€ããŠèŠæ±ã¿ã€ã ã¢ãŠãã§ã¯ãããŸããã ä»ã®ã¯ãŒã«ãŒã¯ãé·ããªã¯ãšã¹ããåŠçããå Žåã§ããã¢ãŒãã¿ãŒã«ããŒãããŒããéããŸãã ãã®å Žåã®ã¿ã€ã ã¢ãŠãæéã¯èµ·åã¿ã€ã ã¢ãŠãæéã§ãã
ããæå³ã§ãgunicornã«ã¯ããªã¯ãšã¹ãã¿ã€ã ã¢ãŠããã¯ãããŸããã
ã¯ããã¯ãŒã«ãŒã¿ã€ã ã¢ãŠãã¯éåæã®ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠããšã¯ç°ãªããŸãã ãã ããéåæã®ãã³ã³ããã¹ãåãæ¿ããïŒããœã±ãã-èªã¿åã/æžã蟌ã¿ããªã©ïŒãçºçããå¯èœæ§ã®ããé¢æ°åŒã³åºãã®ãªãé·æéå®è¡ãªã¯ãšã¹ãã¯ãã¯ãŒã«ãŒã¿ã€ã ã¢ãŠãã®åå ã§ãã ããã«ãã¯ãŒã«ãŒã®èµ·åæã«ã¿ã€ã ã¢ãŠããçºçããå¯èœæ§ããããŸãïŒèŠæ±ããŸã£ãããªãå ŽåïŒã ããããGunicornã®ãã°ã§ã¯ãããã2ã€ã®ç°ãªãã±ãŒã¹ãåºå¥ããæ¹æ³ã¯ãªãããWORKERTIMEOUTããšããã¡ãã»ãŒãžã1ã€ã ããããŸãã
ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠãèšå®ãè¿œå ããå¿ èŠããããŸããïŒ ããã«ãããèµ·åæéãé·ãã¢ããªã¯ã¯ãŒã«ãŒã®ã¿ã€ã ã¢ãŠããå¢ããããšãã§ããŸãã
ããã¯æããªãã§ãã ããã
1ïŒãªã¯ãšã¹ãã®å®è¡æéã枬å®ããã®ã¯é£ããããããªã¯ãšã¹ãã®éå§æãšçµäºæã®æéå·®ã䜿çšããããšã¯ã§ããŸããã
2ïŒç§ãç¥ã£ãŠããããã«ããå®è¡ãŠããããïŒã³ã³ããã¹ãã¹ã€ããéã§å®è¡ãããã³ãŒãã®éïŒã®ã¿ã€ã ã¢ãŠãããã£ããããããšã¯ãgeventã§ã¯äžå¯èœã§ãã
ããã§ã¯äœãææ¡ã¯ãããŸããïŒ
ãã®åé¡ãæ£åœãªã¿ã€ã ã¢ãŠããšæœåšçãªã«ã¹ã±ãŒãã®ã¿ãåå ã§ããå Žå
æåã®å®è¡æã«ååšããªããµãŒããŒè² è·ã«ããã¿ã€ã ã¢ãŠãããããŸã
ããã§äœãããããšã¯ãããŸããïŒ ãŸãã¯ããã®åé¡ã¯è§£æ±ºå¯èœã§ãããããã¯ããé©åã«åŠçãããŸã
ç°ãªãã¬ãã«ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã§éçšäžïŒ
2014幎7æ30æ¥ååŸ1æ14åããMkrtichã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ããã¯æããªãã§ãã ããã
1ïŒãªã¯ãšã¹ãã®å®è¡æéã枬å®ããã®ã¯é£ãããããæéå·®ã䜿çšããããšã¯ã§ããŸããã
ç©ä¹ããšãªã¯ãšã¹ãã®çµããã«ã
2ïŒç§ãç¥ã£ãŠããããã«ããå®è¡ãŠããããã®ã¿ã€ã ã¢ãŠãïŒã³ãŒãã®éïŒããã£ãããã
ã³ã³ããã¹ãã¹ã€ããéã§å®è¡ãããïŒã¯geventã§ã¯äžå¯èœã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/benoitc/gunicorn/issues/588#issuecomment-50673040 ã
2ã€ã®ã¿ã€ã ã¢ãŠããã©ã¡ãŒã¿ãš2ã€ã®ç°ãªããã°ãçšæããããšããå§ãããŸãã
1ïŒ1ã€ã¯ããªã¯ãšã¹ãåŠçäžã«ã®ã¿æ©èœããçŸåšã®ã¿ã€ã ã¢ãŠããã©ã¡ãŒã¿ã§ãã
2ïŒ2ã€ç®ã¯ãã¯ãŒã«ãŒã®èµ·åã¿ã€ã ã¢ãŠãã§ãã
ãã®åé¡ãèŠãŠããŸã
æçµçã«HerokuãuWSGIã«åãæ¿ããŠãããè¯ãæåãåããŸãã... Gunicornã®ä¿®æ£ã§ã¯ãããŸããããæ¬çªãµãŒããŒã§ãã®åé¡ãçºçããæ©æ¥ã«è§£æ±ºãå¿ èŠãªäººã«ã¯ããã®ææ¡ã圹ç«ã€ãããããªããšæããŸããã ã
@nebstreborããã¿ã€ã ã¢ãŠããäžããææ¡ãè©Šã¿ãŸãããïŒ
@CrazyPythonãã±ããã¯ã¯ããŒãºãããŸããã ããªããæ±ããŠããåé¡ãšãããåçŸããæ¹æ³ã説æããæ°ãããã±ãããéãããšãã§ããŸããïŒ ãããåãåé¡ã§ãããã©ãããäœãä»ã®ãã®ã§ãããã©ãããç解ããããšã¯ééããªã圹ç«ã¡ãŸã:)
ã¯ããäžèšã®ããã«ãéãã¯ãããŸããã§ããã åé¡ã¯æ£çºçã§ãã
ååã«ïŒåçŸã§ããªãã£ãïŒãããŠå£æ»
çã§ãç§ãã¡ãããªããã°ãªããªãã£ã
ãã®åããããïŒããã¯1幎以äžã§ããïŒã ç§ã¯Gunicornãæ¬åœã«å¥œãã§ãã
Herokuã®å€éšã§ãåé¡ãªã䜿çšããŠããŸãã
ãã³ãããŒã
CTOå
Ό
±ååµèšè
NutrisliceãIncã
[email protected]
ã»ã«-801-735-7845
8:08ã®ç«ã2015幎6æ30æ¥ã«ã¯ãããã¯Chesneau [email protected]
æžããŸããïŒ
@nebstrebor https://github.com/nebstreborãããã£ãŠã¿ãŸãããïŒ
ã¿ã€ã ã¢ãŠããäžããææ¡ïŒ@CrazyPythonhttps ïŒ//github.com/CrazyPythonãã±ããã¯ã¯ããŒãºãããŸããã
æ°ãããã±ãããéãããšãã§ããŸããïŒããªããæ±ããŠããåé¡ãšãã®æ¹æ³ã説æããŠãã ãã
ãããåçŸããŸããïŒ ãããåãåé¡ã§ãããã©ãããç解ããããšã¯ééããªã圹ç«ã¡ãŸãã
ä»ã®äœããšå ±å:)â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/benoitc/gunicorn/issues/588#issuecomment-117199066 ã
ãã®åé¡ãçºçããŠãããšæããŸãã äž¡æ¹ã®ã¯ãŒã«ãŒïŒ--workers 2ïŒã¯ãé·æéå®è¡ãããŠããèŠæ±ã§ãã³ã°ã¢ããããæçµçã«ã¯åŒ·å¶çµäºããïŒ--timeout 20ïŒãããã«2ã€ã®H13ã衚瀺ãããH12ãšWORKERTIMEOUTãåèµ·åãå§ããŸãã 次ã®10åéãããã¯ç¶ããã¯ãŒã«ãŒã¯ã¿ã€ã ã¢ãŠãã«éããŠåèµ·åããåã«ãªã¯ãšã¹ããæ£åžžã«åŠçã§ããŸããã§ããã ããã§ãdynoãåèµ·åãããšãä¿®æ£ãããŸããã
ä»ã«èª°ãã¡ã¢ãèŠãŠããªãããšã«æ°ä»ããèå³æ·±ãç¹ã®1ã€ã¯ãåé¡ã®éå§æã«2ã€ã®H13ïŒæ¥ç¶ãå¿çãªãã§éããããïŒã衚瀺ãããæçµçã«SIGTERMãçºè¡ãããšãã«ãH13ã®æŽªæ°Žãçºçããããšã§ã-48æ£ç¢ºã«ã¯ãããã¯ç§ãã¡ãèŠãã®ãšåãæ°ã®WORKER TIMEOUTã§ãïŒããã«H13ãèŠãæåã®2ã€ãé€ãïŒã ãããäœãæå³ããã®ãæ£ç¢ºã«ã¯ããããŸããããçãããããã§ãã
H13ãŸãã¯H12ãšã¯äœã§ããïŒ ããã¯herokuããã®ãã®ã§ããïŒ gunicornããã€ã³ããããããŒãã¯ã©ã®ããã«äžããããŸããïŒ herokuãããã·ããœã±ãããéããŠããããšãæ€åºããŠããªãã®ã§ã¯ãªãããšæããŸãã
ãŸããã©ã®ã¯ãŒã«ãŒã䜿çšããŠããŸããïŒ
ã¯ããHerokuãšã©ãŒã³ãŒãã§ãïŒ
H12-ãªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠã-éåžžã¯30ç§ïŒhttps://devcenter.heroku.com/articles/error-codes#h12-request-timeoutïŒ
H13-å¿çãªãã§æ¥ç¶ãéããããŸãã-ïŒhttps://devcenter.heroku.com/articles/error-codes#h13-connection-closed-without-responseïŒ
ç·šéïŒgunicornãç°å¢å€æ°ãšããŠååšããå Žåã¯PORTã䜿çšããããšã«æ°ä»ããã®ã§ããã®ããã«ããŒããæ§æããŸãã
åæã¯ãŒã«ãŒã䜿çšããŠããŸãã
ãããŠãç§ãèšåããã®ãå¿ããŸãããç§ãã¡ã¯gunicorn19.3.0ãå®è¡ããŠããŸã
ä¹ ãã¶ãã«æŽ»åããªãã£ãã®ã§ãçºè¡ãç· ãåããŸããã ã¿ã€ã ã¢ãŠããé ãããããšã¯ãã¢ããªã±ãŒã·ã§ã³ãé·æéèµ·åããå Žåã«é©ããŠãããããããŸããããå¿ èŠã«å¿ããŠå¥ã®ãã±ããã§å®è¡ããå¿ èŠããããŸãã
new-relic adminprocfileã䜿çšããherokuã®gunicornuvicornã§ãåãåé¡ãçºçããŠããŸãã
newrelic-admin run-program gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.main:fastapi_app -b 0.0.0.0:${PORT:-5000} --log-level info --access-logfile=- --logger-class=gunicorn_color.Logger --preload
ããã«ãããã·ã¹ãã ãèµ·åãããšããã«ãã®ãã°ã衚瀺ãããŸãã
2021-03-19T13:18:19.187532+00:00 heroku[web.1]: State changed from starting to up
2021-03-19T13:18:51.964740+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=api-app-clienti-pr-49.herokuapp.com request_id=8742009a-3e56-4f83-a147-97ff84d4e30b fwd="5.89.111.249" dyno=web.1 connect=1ms service=30003ms status=503 bytes=0 protocol=https
2021-03-19T13:19:04.292784+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/api" host=api-app-clienti-pr-49.herokuapp.com request_id=85b6320a-7728-4074-87eb-b0992e7c3f9d fwd="5.89.111.249" dyno=web.1 connect=3ms service=30001ms status=503 bytes=0 protocol=https