ïŒãªããŒã¹ãããã·ïŒnginxãµãŒããŒã§ã¯ã©ãã·ã¥ããŠãããšããåé¡ãçºçããŠããŸãã 圌ãã¯èŠæ±ã«å®å šã«å¿çããã®ãããã圌ãèªèº«ã§ãã®ç¶æ ããæãåºããŠããªãããã§ãã ãããã®ãµãŒããŒã¯ã倧éã®ãªã¯ãšã¹ãïŒ1æ¥ããã500äžãè¶ ããïŒãåŠçããŸãã
éå»æ°æ¥éãç§ã¯å°ãéæ¹ã«æ®ããŠããŠãç£èŠã«ãã£ãŠãããèŠåããããšãã¯ãã€ã§ãæåã§Dockerã€ã³ã¹ã¿ã³ã¹ãåèµ·åããŸããããnginxããŸã å¿çããŠãããã©ããããã§ãã¯ãããã«ããŒcronã¹ã¯ãªãããé 眮ããããšã«ããŸããåé¡ãçºçããå Žåã¯ãsupervisordãä»ããŠåèµ·åããŸãã
æåã«Dockerã³ã³ãããŒãåèµ·åããŠãããããå®éã«ã¯ãããã°æ å ±ãååŸããŠããŸããã§ããããã®ã³ã°ãåæ¢ããã ãã§ããã ãã ãããããå€æŽããŠä»£ããã«ã³ã³ããå ã§nginxãåèµ·åããåŸããã°ã«æ¬¡ã®æ å ±ãèšé²ãããŸãã
2017/02/01 01:14:16 [alert] 489#0: worker process 501 exited on signal 9
2017/02/01 01:14:16 [alert] 489#0: shared memory zone "auto_ssl" was locked by 501
2017/02/01 01:14:16 [alert] 489#0: worker process 502 exited on signal 9
ç§ã¯Googleãå©çšããŠããŸããããåç §ã§ããã®ã¯https://github.com/18F/api.data.gov/issues/325ã ãã§ã
åãDockerã³ã³ããã䜿çšããŠãããã®ãã°ãããŒã«ã«ã§åçŸããããšã¯ã§ããŸããã
ç§ã¯å°ãéæ¹ã«æ®ããŠããŸããç§ãã¡ã®èªååèµ·åã¹ã¯ãªããã¯ä»ã®ãšããåé¡ãæŽçããŸãããã誰ããã¢ã€ãã¢ãæã£ãŠãããã©ããã確èªããã®ã¯ããããšã§ãã è¿œå ã®ãã°ããªã³ã«ããŠãããã°ãã°ãè©Šè¡ã§ããã°å¹žãã§ãïŒæ¬çªãµãŒããŒã§ãªã³ã«ããã®ã¯å°ãæãã£ãã§ãïŒã
ããããããåæ¢ã«ã€ãªãã£ããšèããŠç³ãèš³ãããŸããïŒ
æ®å¿µãªãããç§ãã¡ã®ã€ã³ã¹ããŒã«ã§ã¯ãããªãã®éã®ãã©ãã£ãã¯ãååŸãããã®ãããªãã®ã¯èŠãŠããŸããïŒæšå¹Ž3æã®äºä»¶ä»¥æ¥ïŒã ãã ããïŒ29ã§å ±åããããã®ãããªå¥ã®ããé¡äŒŒããåé¡ããããé¢é£ããŠããå¯èœæ§ã®ããåé¡ãä¿®æ£ããŸããããåé¡ãå®å šã«èª¬æããŠããªãå¯èœæ§ããããŸãã ãã ãããã®åé¡ã¯é¢é£ããŠããªãå¯èœæ§ããããŸãïŒç»é²ãçºçããææã«åºæã§ããïŒã
ããããããã°ããã®ãæäŒã£ãŠããããšããç³ãåºã«æè¬ããŸããããããããã¯ééããªãåºã«å°éããã®ã¯è¯ãããšã§ãã æåã«ããã€ã質åããããŸãã
worker_processes
èšå®ïŒïŒlua-resty-auto-sslã¯luarocksãã0.10.3-1ã§ã
OpenResty1.11.2.2ã䜿çšããŠããŸãã
nginx version: openresty/1.11.2.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.2h 3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.60 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.31 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.06 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.7 --add-module=../ngx_lua_upstream-0.06 --add-module=../headers-more-nginx-module-0.32 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.17 --add-module=../redis2-nginx-module-0.13 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.14 --add-module=../rds-csv-nginx-module-0.07 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-http_ssl_module --with-http_perl_module --with-http_v2_module --with-http_secure_link_module --add-module=/nginx-build/openresty-1.11.2.2/../testcookie-nginx-module --add-module=/nginx-build/openresty-1.11.2.2/../lua-upstream-cache-nginx-module --add-module=/nginx-build/openresty-1.11.2.2/../nginx-module-vts --with-openssl=/openssl
åãµãŒããŒãæ±ããµããã¡ã€ã³ã¯å¥ã
ãªã®ã§ãä»ã®ãšãããã¡ã€ã«ã·ã¹ãã ã
ã¯ã©ãã·ã¥ãçºçããå Žåã3æéãã3æ¥çšåºŠãŸã§ãå®å
šã«ã©ã³ãã ã§ããããã«èŠããŸãã
nginx atmããªããŒããããåèµ·åããã ãã§ããããããè©ŠããŠããããæ©èœãããã©ããã確èªããŸãã
æåã¯1人ã®ã¯ãŒã«ãŒã䜿çšããŠããŸããããåé¡ãçºçãããšãã«ããã2人ã«å¢ãããŠãéããçãããã©ããã確èªããŸããã
次ã®OpenResty以å€ã®ã¢ãžã¥ãŒã«ã䜿çšããŸãã
æ§æã³ãŒãã§ã¯ããã®ãããžã§ã¯ã以å€ã®LuaããŸã 䜿çšããŠããŸããã
ãã©ããŒã¢ãããé ããŠãã¿ãŸããïŒ ããã«ããã€ã調ã¹ãåŸãäœãèµ·ãã£ãŠããã®ãã«ã€ããŠããã€ãã®çè«ããããŸãã
ã§ã¯ãã·ã¹ãã ã¬ãã«ã®ãã°ã«ã¡ã¢ãªäžè¶³ãoom-killerã«ã€ããŠäœãèŠãããŸããïŒ ãããã®ãµãŒããŒã§ãnginxã®ã¡ã¢ãªå¢å ãŸãã¯ã¡ã¢ãªãªãŒã¯ã瀺ãå¯èœæ§ã®ããä»ã®ç£èŠããããŸããïŒ ç§ãã¡ã¯ãä»ã®nginxã®ã¢ãžã¥ãŒã«ã®ããã€ãã¯ãŸãã圹å²ãæãããŠããå¯èœæ§ãããå Žåãç§ã¯æã£ããã ãã©ã®ã§ãç§ãã¡ã®LUA-resty-èªåSSLã®ã€ã³ã¹ããŒã«ã®ããããã«ãããä»»æã®ã¡ã¢ãªãªãŒã¯ãèŠãŠãããšã¯æããªãïŒãããããèšåAã®lua-upstream-cache-nginx-moduleã®ã¡ã¢ãªãªãŒã¯ïŒã
ç³ãèš³ãããŸãããã @ GUIã«æ»ã£ãŠãkilled on signal 9ã¯ãã°ã«é¢é£ããŠããªãããšãæ確ã«ãã匷å¶çµäºããŸããã ãããã®ãµãŒããŒã®ã¡ã¢ãªã«åé¡ã¯ãããŸãããçŽ2GBã®ã¡ã¢ãªããããå®éã«äœ¿çšãããŠããã®ã¯ãããããã§ãæ®ãã¯ã»ãšãã©ãã£ãã·ã¥ã§ãã dmesgã§OOMã匷å¶çµäºããããšã¯ãããŸããã
åé¡ã解決ããããã«ããã€ãã®ã¢ãžã¥ãŒã«ãåé€ããéæšå¥šã®lua-upstream-cache-nginx-moduleãåé€ããpagespeedãåé€ããããšãè¿œå ããå¿ èŠããããŸãããããã¯åœ¹ã«ç«ããªãã£ãããã§ãã
圹ç«ã€å¯èœæ§ã®ãããšã©ãŒè¡ãããã«ããã€ããããŸããããã«ãµãŒããŒããååŸããŠã¿ãŸãã
@ajmgh ïŒé¢é£ããŠãããã©ããã¯å®å
šã«ã¯lua_shared_dict
ã¡ã¢ãªãµã€ãºãå°ããããå Žåã«å¥åŠãªãšã©ãŒã«ã€ãªããå¯èœæ§ã®ããããã€ãã®æœåšçãªåé¡ã远跡ãããšæããŸãïŒ https ïŒ
ã§ã¯ãã·ã¹ãã ã«ãã蚌ææžã®æŠæ°ãšãnginxæ§æã§æ§æãããŠããlua_shared_dict auto_ssl
倧ãããç¥ã£ãŠããŸããïŒ å¯èœã§ããã°ãv0.10.6ã«ã¢ããã°ã¬ãŒãããŠã¿ãããšãã§ããŸããããã¯ã0.10.3以éããããä¿®æ£ããå¯èœæ§ã®ããæŽæ°ãããã€ãããããïŒéãè¯ããã°ïŒãå°ãªããšããšã©ãŒåŠçãšã¡ãã»ãŒãžãæ¹åãããå¯èœæ§ãããããã§ãã
ç§ã¯ãŸã£ããåããšã©ãŒã«çŽé¢ããŠããŸãã
lua-resty-auto-sslãããŒãžã§ã³0.10.6-1ã«æŽæ°ãã lua_shared_dict auto_ssl_settings
ã1000mã«å¢ãããŸãïŒ64kã«èšå®ãããåïŒã
lua_shared_dict auto_ssl
ã¯åããŸãŸã§ãïŒ1000m
ãããã®å€æŽã«ãã£ãŠãã®åé¡ãä¿®æ£ããããã©ããã確èªããã®ãåŸ ã£ãŠããã ãã§ãïŒ/
@ajmghããªãã¯ããªãã®åé¡ã解決ããŸãããïŒ
@aiev auto_ssl_settings
çŸåšãçãæååãš1ã€ã®ããŒã«å€ã®ã¿ãæ ŒçŽãããããå€æŽããŠãéãã¯ãããŸããã 蚌ææžã¯auto_ssl
ä¿åãããŸãã 代ããã«ãããå¢ãããŠã¿ãŠãã ããã
ããããææ°ã®ã¢ããããŒãã§ã¯åé¡ã¯ä¿®æ£ãããŸããã auto_sslã®ãµã€ãºã8Mã«å¢ãããŸãããããã¯ã䜿çšãã蚌ææžã10åçšåºŠã§ãå€æŽããªããããããéãã§ãã
# Log entries after my script detects nginx is unresponsive and force kills it
2017/05/24 13:29:15 [alert] 462#0: worker process 474 exited on signal 9
2017/05/24 13:29:15 [alert] 462#0: worker process 475 exited on signal 9
2017/05/24 13:29:15 [alert] 462#0: shared memory zone "auto_ssl" was locked by 475
ç§ã¯åãåé¡ãæ°åçµéšããŸããã
luarocksã®OpenResty1.11.2.3 / 4ãšlua-resty-auto-ssl0.11.0-1ã䜿çšããŠããŸãã
ãã®åé¡ãçºçãããšã100ãè¶
ããtcpæ¥ç¶ãCLOSE_WAITç¶æ
ã§ã¹ã¿ãã¯ããŸãã
ç§ãã¡ã¯åãåé¡ãäœåºŠãçµéšããŸããã
nginxããŒãžã§ã³ïŒopenresty / 1.11.2.4
lua-resty-auto-ssl 0.11.0-1
CLOSE_WAITç¶æ
ãå€ããnginxã¯å¿çã§ããªããªããŸãã ãã®åé¡ã解決ããã«ã¯ãCLOSE_WAITæ¥ç¶ã匷å¶çµäºããããDockerãåèµ·åããå¿
èŠããããŸãã
@ajmghããªãã¯ããªãã®åé¡ã解決ããŸãããïŒ openrestyã³ã³ããã§ãåãåé¡ãçºçããŠããŸãã CLOSE_WAITç¶æ ã§æ倧1200ã®æ¥ç¶ããããlua-resty-auto-sslã§openrestyã®ã¿ãå®è¡ãããµãŒããŒã®/ tmpã«å€ãã®è±æ°Žãã¡ã€ã«ããããŸãã
ãããç§ãã¡ã®ã·ã¹ãã æ§æã§ã
@ronailãããããã ããã©ãŠã³ãããã³ã«ãµãŒããŒãè¿œå ãããã®åé¡ãçºçãããšãã«èªååèµ·åã¹ã¯ãªããã䜿çšããããã«ãããããå€§å¹ ã«è»œæžããŸããã
ãã®ãã°ãçµéšããDockerã䜿çšããŠãã人ã¯ä»ã«ããŸããïŒ ãã¶ãããã¯Lua / OpenRestyãšDockerã®çµã¿åããã§èµ·ãã£ãŠããæ¬åœã«å¥åŠãªããšã§ãã
Dockerã䜿çšããŠããŸããããåãåé¡ã«çŽé¢ããŠããŸãã
è±æ°Žç¶æ ã§èšŒææžãçºè¡ããããšãããšããããåé¡ã«ãªããšæããŸãã
åæ§ã®åé¡ãçºçããŠãããjenkinsã«30åããšã«OpenRestyãåèµ·åãããå¿ èŠããããŸãïŒ1æéããšã«ã¯ã©ãã·ã¥ããŸã...ïŒ
é«ãã¡ã¢ãªå¶éãèšå®ãããŠããŸãããããã圹ç«ã€å ŽåãLetsEncryptã§å€±æããèªèšŒã«å¯ŸããŠããªãã®æ°ã®ã¬ãŒãå¶éãçºçããŠããããšã«æ°ä»ããŸãããïŒ
æšæ¥åãåé¡ãçºçããæ ¹æ¬çãªåå ãäœã§ãããã«ã€ããŠã®ãã€ã³ã¿ãå«ãŸããŠããªããããã®ã¬ããŒãïŒïŒ43ãïŒ136ïŒãèŠã€ãããŸããã ãã¹ãã·ã¹ãã ã§åé¡ãåçŸã§ããªãã£ããããæ¬çªã·ã¹ãã ã§ãããã°ããå¿ èŠããããŸããã ã幞ããªããšã«ãããã³ã°ã¯ååã«é »ç¹ã«çºçããããããããã°ã¡ãœããããã°ããç¹°ãè¿ãããšãã§ããŸããã ãŸãããã¹ãŠã®nginxããã»ã¹ã§strace -fp $ pidã®ã¿ã§ãããããã«ããããã¹ãŠã®ããã»ã¹ãfutexïŒïŒãåŸ æ©ããŠããããšãæããã«ãªããŸãããããã¯ãpidã®1ã€ãåžžã«shdictãããã¯ããŠãããšããäºå®ãšäžèŽããŠããŸãã 次ã«ãåããã»ã¹ã®gdbããã¯ãã¬ãŒã¹ã®ãã³ããè¿œå ããã€ã¡ãŒãžã«ãããã°ã·ã³ãã«ãè¿œå ããåŸãåé¡ã次ã®ã³ãŒããã¹ã«ããããšãæããã«ãªããŸããã
#3 0x00007f8f4ea50219 in ngx_shmtx_lock (mtx=0x7f8f31a0c068) at src/core/ngx_shmtx.c:111
#4 0x00007f8f4eb7afbe in ngx_http_lua_shdict_set_helper (L=0x418257a0, flags=0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:1016
#5 0x00007f8f4eb7a4a4 in ngx_http_lua_shdict_delete (L=0x418257a0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:632
#6 0x00007f8f4debd2f3 in lj_BC_FUNCC () from /usr/local/openresty/luajit/lib/libluajit-5.1.so.2
#7 0x00007f8f4dec0b9f in gc_call_finalizer (g=0x418063b8, L=0x418257a0, mo=0x7ffc7592da00, o=0x40e11948) at lj_gc.c:475
#8 0x00007f8f4dec0e2b in gc_finalize (L=0x418257a0) at lj_gc.c:509
#9 0x00007f8f4dec15d9 in gc_onestep (L=0x418257a0) at lj_gc.c:659
#10 0x00007f8f4dec16ef in lj_gc_step (L=0x418257a0) at lj_gc.c:689
#11 0x00007f8f4ded8c3d in lua_pushlstring (L=0x418257a0, str=0x7f8f330a6066 "0\202\002\v\n\001", len=527) at lj_api.c:639
#12 0x00007f8f4eb7a225 in ngx_http_lua_shdict_get_helper (L=0x418257a0, get_stale=0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:538
#13 0x00007f8f4eb79eb6 in ngx_http_lua_shdict_get (L=0x418257a0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:419
ngx_http_lua_shdict_get_helperïŒïŒãäžç®èŠãã ãã§ãåé¡ã®æ ¹æ¬çãªåå ãæããã«ãªããŸããshdictãããã¯ãããlua_pushlstringãã¬ããŒãžã³ã¬ã¯ã¿ãŒãåŒã³åºãããšããããŸããããã«ãããåãshdictããã¢ã€ãã ãåé€ããããããããã¯ãçºçããå¯èœæ§ããããŸãã
ç§ã®è¿ éã§æ±ã解決çã¯ããã§ããïŒããããå ¬éããã€ããã¯ãªãã®ã§éãã§ãïŒã
case SHDICT_TSTRING:
{
int len = value.len;
char *tmp = malloc(len);
if(!tmp) {
ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "dict get: malloc: out of memory");
return luaL_error(L, "out of memory");
}
ngx_memcpy(tmp, value.data, value.len);
ngx_shmtx_unlock(&ctx->shpool->mutex);
lua_pushlstring(L, tmp, len);
free(tmp);
}
break;
ãããŸã§ã®ãšãããããã¯å®ç§ã«å®è¡ãããŸããã·ã¹ãã ã®å éšåäœã«ã€ããŠããæ·±ãæŽå¯ãæã£ãŠãã人ã¯ãããè¯ãä¿®æ£ãäœæããããšæããããããŸããã
èå³æ·±ãããšã«ãããã¯æ¢ç¥ã®äºå®ã§ãïŒ
https://github.com/openresty/lua-nginx-module/issues/1207#issuecomment -350745592
ããã¯ç¢ºãã«èå³æ·±ãã§ãã ããªããèšåããåé¡ã«ãããšãlua-resty-coreã䜿çšãããšåé¡ãä¿®æ£ããããã®ããã¥ã¡ã³ãã«ãããšãopenresty 1.15.8.1以éã«èªåçã«ããŒããããããããã®ãã°ã¯ãã®ããŒãžã§ã³ã§ãµã€ã¬ã³ãã«ä¿®æ£ãããŸããã ãããã·ãã¢ããã°ã¬ãŒãããŠå ±åããŸãã
å®å šã«æ©èœããŠããããã«èŠããŸã-ãŸã æç¶ããåã«ãã³ã°ããåå ãšãªã£ãç¶æ ãæ³å®ãããšããã°ã¯ä¿®æ£ããããšæããŸãã
3幎以äžã¹ã ãŒãºã«èµ°ã£ãåŸãã¡ããã©ããã«ééããŸããã
ãŸããæ¬çªç°å¢ã§ãã®åé¡ãçºçããŸããâ
OpenRestyã>1.15.8.1
æŽæ°ããŸã
ããã¯éåžžã«æ害ã§ããããã«æãããã®ã§ãf66bb61f11a654f66d35dd793ceaf0293d9c0f46ãããã«ãªãªãŒã¹ããããå°ãªããšãæšå¥šäºé ã§ã¯ãªããèŠä»¶ã«åãããŠããã¥ã¡ã³ããæŽæ°ãã䟡å€ããããããããŸããã
æãåèã«ãªãã³ã¡ã³ã
ãŸããæ¬çªç°å¢ã§ãã®åé¡ãçºçããŸããâ
OpenRestyã
>1.15.8.1
æŽæ°ããŸãããã¯éåžžã«æ害ã§ããããã«æãããã®ã§ãf66bb61f11a654f66d35dd793ceaf0293d9c0f46ãããã«ãªãªãŒã¹ããããå°ãªããšãæšå¥šäºé ã§ã¯ãªããèŠä»¶ã«åãããŠããã¥ã¡ã³ããæŽæ°ãã䟡å€ããããããããŸããã