- ã³ãŒããæžã;
- ãããã°ããã¹ãã
- ãã®åŸãjarã«ããã±ãŒãžåãããŸãã
- Linuxã«éä¿¡ãããåäœããŸãã
æ©èœãããšããäºå®ã«ã¯ç¹å¥ãªéæ³ã¯ãããŸããã ããããããã«ããããã®ãããªéçºè ã¯ã¯ãã¹ãã©ãããã©ãŒã ã®äžçã§å°ããç ç³ãã«ãªããå®éã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å®éã«ã©ã®ããã«æ©èœããããç解ããããªããšããäºå®ã«ã€ãªãããŸã ã

äžæ¹ããµãŒããŒã管çãããµãŒããŒã«JVMãã€ã³ã¹ããŒã«ããjarãã¡ã€ã«ãšwarãã¡ã€ã«ãéä¿¡ããLinuxã®äžçããèŠããšã次ã®ãã¹ãŠã®äººãããŸãã
- ãšã€ãªã¢ã³;
- å°æ;
- ãœãŒã¹ããã¯åéãããŸããã
- äžéšã®jarã¢ãŒã«ã€ãã«ãã£ãŠé
ä¿¡ãããŸãã
- ãµãŒããŒäžã®ãã¹ãŠã®ã¡ã¢ãªããé£ã¹ããã
- äžè¬ã«ã人éãšããŠæ¯ãèããŸããã
Alexey Ragozinã® Highload ++ã«é¢ããã¬ããŒãã®ç®çã¯ããã®ãã³ãŒããããã«é²ãã§ããã LinuxãŠãŒã¶ãŒåãã®Javaã®æ©èœããããã£ãŠJavaéçº è åãã®Linuxã®æ©èœã«ã€ããŠèª¬æããããšã§ããã
å€ãã®åé¡ãããããããã¯ãã¹ãŠèå³æ·±ããã®ã§ãããã·ã§ã«ãåãæŒæã«2åèœã¡ãããšã¯ãªããããã¬ããŒãã¯å ±åäŒã§ã¯ãããŸããã ãããã£ãŠããã§ã«ç¥ãããŠãããç©Žããå¡ãããšã¯æå䞻矩è ã®ç«å Žã§ãã 代ããã«ã次ã®ããšã«ã€ããŠè©±ããŸãããã
- JVMå®è£
æ©èœ
- Linuxå®è£
æ©èœïŒ
- ã©ãããŠãããã³ã°ã§ããŸãããã

Javaã«ã¯ä»®æ³ãã·ã³ããããLinuxã¯ãä»ã®ææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšåæ§ã«ãæ¬è³ªçã«ä»®æ³ãã·ã³ã§ãã JavaãšLinuxã®äž¡æ¹ã«ã ã¡ã¢ãªç®¡ç ã ã¹ã¬ãã ãããã³APIããããŸã ã
èšèã¯äŒŒãŠããŸãããå®éã«ã¯éåžžã«ç°ãªããã®ããã°ãã°ãããã®äžã«é ãããŠããŸãã å®éã«ããããã®ç¹ãæ€èšããèšæ¶ã«æã泚æãæããŸãã
Javaã¡ã¢ãª
JVM HotSpotã®å®è£ ã«ã€ããŠã®ã¿èª¬æããŸãããããã¯Open JDKãšOracle JDKã§ãã ã€ãŸããããããIBM J9ã«ã¯ããã€ãã®ç¹æ§ããããŸãããæ®å¿µãªããããããã«ã€ããŠã¯ç¥ããŸããã HotSpot JVMã«ã€ããŠè©±ããŠããå Žåãäžçã®ç¶æ³ã¯æ¬¡ã®ãšããã§ãã ãŸããJavaã«ã¯Javaãªããžã§ã¯ããååšããé åããããŸããããããããŒãããŸãã¯ãã·ã¢èªã§ã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒãåäœããå Žæã§ãã ãã®ã¡ã¢ãªé åã¯ãååãšããŠãããã»ã¹ç©ºéã®å€§éšåãå ããŸãã ããŒãã¯ãé çªã«ãè¥ãã¹ããŒã¹ãšå€ãã¹ããŒã¹ïŒè¥ãäžä»£/å€ãäžä»£ïŒã«åå²ãããŸãã JVMã®ãµã€ãºèšå®ã®ããŒããŒã«å ¥ãããšãªããéèŠãªããšã¯ãJVMã«ãããŒãã¹ããŒã¹ãæ¡å€§ã§ããæ倧ãµã€ãºãå®çŸ©ããã-Xmxããã©ã¡ãŒã¿ãŒãããããšã§ãã

ãããŠãå€ãã®ãªãã·ã§ã³ããããŸãïŒ
- è¥ã空éã®å¯žæ³ãåå¥ã«ç®¡çã§ããŸãã
- æ倧ããŒããµã€ãºãããã«èšå®ã§ããŸãã
- ãŸãã¯ã圌ãåŸã
ã«æé·ã§ããããã«ããŸãã
éšåãå€ããã-å¶éãããããšãéèŠã§ãã ãããŠãååãšããŠãããã¯JVMã䜿çšãããã¹ãŠã®é åã«å¯Ÿããäžè¬çãªã¢ãããŒãã§ãã ã€ãŸããäžã®å³ã«ãªã¹ããããŠããã»ãšãã©ãã¹ãŠã®é åã«ã¯äžå®ã®å¶éããããŸãã JVMã¯ãå¶éã«åºã¥ã㊠ã¢ãã¬ã¹ã¹ããŒã¹ãçŽã¡ã«äºçŽãã å¿ èŠã«å¿ããŠããã®ç¯å²ã®å®ã¡ã¢ãªãªãœãŒã¹ãèŠæ±ããŸãã ããã¯ç解ããããšãéèŠã§ãã
ããŒãã«å ããŠãä»ã®ã¡ã¢ãªæ¶è²»è ãããŸãã ãããã®äžã§æãéèŠãªã®ã¯ãã¹ããªãŒã ã¹ã¿ãã¯ã®ã¡ã¢ãªé åã§ãã Javaã®ã¹ã¬ããã¯éåžžã®Linuxã¹ã¬ããã§ãããç¹å®ã®ã¡ã¢ãªãµã€ãºãäºçŽãããŠããã¹ã¿ãã¯ããããŸãã ã¹ã¬ãããå€ãã»ã©ãããã»ã¹ã¡ã¢ãªã«å²ãåœãŠãããã¹ã¿ãã¯ãå€ããªããŸãã Javaã®ã¹ã¬ããæ°ã¯æ°çŸããã³æ°ååäœã§æž¬å®ã§ãããããç¹ã«200 MBã®ããŒããããã50ã100ã¹ã¬ããã®ThreadPoolãããã¹ããŒãã¬ã¹ãã€ã¯ããµãŒãã¹ãããå Žåã¯ããã®æ°å€ãéåžžã«éèŠã«ãªãããšããããŸãã
ããã«ãããããNIO ãã€ã¬ã¯ã ãããã¡ãŒ ããããŸã ããããã¯Javaã®ç¹å¥ãªãªããžã§ã¯ãã§ãããŒãå€ã®ã¡ã¢ãªãæäœã§ããŸãã éåžžãI / Oã®æäœã«äœ¿çšãããŸããããã¯ãCã³ãŒããšJavaã³ãŒãã®äž¡æ¹ããçŽæ¥ã¢ã¯ã»ã¹ã§ããã¡ã¢ãªã§ããããã§ãã ãããã£ãŠããã®é åã«ã¯APIãä»ããŠã¢ã¯ã»ã¹ã§ããæ倧å¶éããããŸãã
æ®ãã¯ã¡ã¿ããŒã¿ãããçš®ã®çæãããã³ãŒãããããã®ã¡ã¢ãªã¯é垞倧ããªå€ã«ã¯æé·ããŸãããã1ã€ãããŸãã
ãããã®ç¹å¥ãªé åã«å ããŠãJVMãããããC ++ã§èšè¿°ãããŠããããšãå¿ããªãã§ãã ããã
- mallocããã³åŸæ¥ã®ã¡ã¢ãªå²ãåœãŠã
- JVMã«ããŒããããã©ã€ãã©ãªïŒéçãŸãã¯åçã«ãªã³ã¯ãããã¡ã¢ãªã䜿çšã§ããŸãïŒã
ãããŠããã®ã¡ã¢ãªã¯ç§ãã¡ã®ã¹ããŒã ã«åŸã£ãŠåé¡ãããã®ã§ã¯ãªããåã«Cã©ã³ã¿ã€ã ã®æšæºçãªæ段ã«ãã£ãŠå²ãåœãŠãããã¡ã¢ãªã§ãã Cã«ãåé¡ããããããªãå¹³ããªå Žæã«ãããŸãã
ããšãã°ãããã§ã¯jar圢åŒã§Javaã³ãŒããé åžããŠããŸãã Jarã¯zipã¢ãŒã«ã€ãã§ãããzlibã©ã€ãã©ãªã䜿çšããŠäœæ¥ããŸãã äœãã解åããããã«ãzlibã¯è§£åã«äœ¿çšããããããã¡ãå²ãåœãŠãå¿ èŠãããããã¡ããã¡ã¢ãªãå¿ èŠã§ãã ãã¹ãŠã¯åé¡ãããŸãããã1ã€ã®å€§ããªjarãäœæããããã¥ã¢ã³ã¹ãçºçããå Žåãããããuber-jarã®modããããŸãã
ãã®ãããªjarãã¡ã€ã«ããèµ·åããããšãããšãåæã«è§£åããããã«å€ãã®zlibã¹ã¬ãããéãããŸãã ãŸããJavaã®èŠ³ç¹ããèŠããšããã¹ãŠãé 調ã§ããããŒãã¯å°ããããã¹ãŠã®é åã¯å°ãããªã£ãŠããŸãããããã»ã¹ã®ã¡ã¢ãªæ¶è²»ã¯å¢å€§ããŠããŸãã ãã¡ãããããã¯ãèšåºçããªã±ãŒã¹ã§ããããã®ãããªJVMãèæ ®ããå¿ èŠããããŸãã ããšãã°ã-Xmxã1 GBã«èšå®ããJavaãDockerã³ã³ããã«é 眮ããã³ã³ããã®ã¡ã¢ãªå¶éã1 GBã«èšå®ãããšã JVMã¯ããã«é©åããŸãã ã ããå°ãã¹ããŒããå¿ èŠããããŸããããã®éã¯ã¹ã¬ããæ°ãã³ãŒãã®åäœãªã©ãå€ãã®èŠå ã«æ£ç¢ºã«äŸåããŸãã
ããããJVMãã¡ã¢ãªã§ã©ã®ããã«æ©èœãããã§ãã
ããŠãããã°ãèŽè¡ã®å¥ã®éšåã§ãã
Linuxã¡ã¢ãª
Linuxã§ã¯ã ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãããŸããã èšæ¶ã®èŠ³ç¹ããèŠããšã圌ã®äœåã¯å®å šã«ç°ãªã£ãŠããŸãã 圌ã«ã¯ã ããŒãžåå²ãããç©ççèšæ¶ããããŸãã ç¬èªã®ã¢ãã¬ã¹ç©ºéãæã€ããã»ã¹ããããŸã ã 圌ã¯ãããŒãžã®åœ¢åŒã§ãã®ã¡ã¢ãªã®ãªãœãŒã¹ãããã»ã¹éã§äœããã®åœ¢ã§åå²ãããä»®æ³ã¢ãã¬ã¹ç©ºéã§åäœããŠä»äºãããããã«ããå¿ èŠããããŸãã

éåžžãããŒãžãµã€ãºã¯4ãããã€ãã§ãã å®éãããã¯ããã§ã¯ãããŸãã; x86ã¢ãŒããã¯ãã£ã§ã¯ã倧ããªããŒãžã®ãµããŒããéåžžã«é·ãéååšããŠããŸããã Linuxã§ã¯ãæ¯èŒçæè¿ç»å ŽããŸããããå°ãå¥åŠãªç¶æ³ã§ãã Linuxã§ã©ãŒãžããŒãžïŒTransparent Huge TablesïŒã®ãµããŒããç»å Žãããšããå€ãã®äººã ã¯ãLinuxã§ã©ãŒãžããŒãžãæäŸããéã®ãã¥ã¢ã³ã¹ã«èµ·å ããããã©ãŒãã³ã¹ã®äœäžã«é¢é£ããããããèžã¿ãŸããã ãããŠéããªããã€ã³ã¿ãŒãããã¯ãããã害ã®éããæ¶ãããã®å§åã§äžæ¯ã«ãªããŸããã ãã®åŸãLinuxã§ã®å€§ããªããŒãžã®æäœã«é¢é£ããããã€ãã®ãã°ã修埩ãããŸããããæ²æ®¿ç©ã¯æ®ããŸããã
ããããçŸæç¹ã§ã¯ãäŸãã°ãã©ã®ããŒãžã§ã³ããã©ãŒãžããŒãžãµããŒããããã©ã«ãã§æå¹ã«ã§ããå¿é ããå¿ èŠã¯ãªãã®ããæ確ãªç解ã¯ãããŸããã
ã ãã泚æããŠãã ããã LinuxãµãŒããŒã§ã«ãŒãã«æ¶è²»ãçªç¶çªç¶å¢å ããå Žåãåé¡ã¯ã倧èŠæš¡ãªããŒãžããªã³ã«ãªã£ãŠããã ãã§ãã»ãšãã©ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ããã©ã«ãã§ãªã³ã«ãªã£ãŠããããšã§ãã
ãã®ãããã«ãŒãã«ã®èŠ³ç¹ããèŠããšãLinuxã«ã¯å€ãã®ç®¡çããŒãžããããŸã ã ããã»ã¹ã®èŠ³ç¹ãããã¢ãã¬ã¹ç¯å²ãäºçŽããã¢ãã¬ã¹ç©ºéããããŸãã äºçŽãããã¢ãã¬ã¹ç©ºéã¯ããªãœãŒã¹ã§ã¯ãªããäœããããŸãã ããã®äžã«ã¯äœããããŸãã ã ãã®ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ãããšãäœãååšããªããããã»ã°ã¡ã³ããŒã·ã§ã³éåãçºçããŸãã
ããŒãžãã¢ãã¬ã¹ã¹ããŒã¹ã«è¡šç€ºããã«ã¯ããããã«ç°ãªãsyscallãå¿ èŠã§ããããã»ã¹ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ããããã®ã¢ãã¬ã¹ã«1 GBã®ã¡ã¢ãªãå¿ èŠã§ããããšäŒããŸãã ãããããã®å Žåã§ããããã«ããã¡ã¢ãªãããã«ã¯è¡šç€ºãããããã®ããªãã¯ããããŸãã

ã«ãŒãã«ã®èŠ³ç¹ããèŠããšãããŒãžã®åé¡ã¯æ¬¡ã®ãšããã§ããããŒãžããããŸãã
aïŒ private ãã€ãŸãããããã1ã€ã®ããã»ã¹ã«å±ãã1ã€ã®ããã»ã¹ã®ã¿ã®ã¢ãã¬ã¹ç©ºéã§äœ¿çšã§ããããšãæå³ããŸãã
bïŒ å¿å -ããã¯ãã¡ã€ã«ã«é¢é£ä»ããããŠããªãéåžžã®ã¡ã¢ãªã§ãã
cïŒ ã¡ã¢ãªãããã³ã°ãã¡ã€ã« -ãã¡ã€ã«ãã¡ã¢ãªã«ãããã³ã°ããŸãã
dïŒ shared ã次ã®ããããã§ãã
- Copy-On-Write ãã€ãŸããããã»ã¹ãåå²ãããšãæžã蟌ãŸããŠããŒãžããã©ã€ããŒãã«ãªããŸã§ãäž¡æ¹ã®ããã»ã¹ã§ã¡ã¢ãªã䜿çšå¯èœã«ãªããŸãã
- å
±æãã¡ã€ã«ãä»ããŠãã€ãŸããè€æ°ã®ããã»ã¹ãåããã¡ã€ã«ãã¡ã¢ãªã«ãããããå ŽåãããŒãžãå
±æã§ããŸãã
äžè¬ã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«ã®èŠ³ç¹ããèŠããšããã¹ãŠãéåžžã«åçŽã§ãã

ã·ã³ãã«ã§ãããå®å šã§ã¯ãããŸããã
ã¡ã¢ãªã«é¢ããŠãµãŒããŒã§äœãèµ·ãã£ãŠããã®ããç解ãããå Žåã¯ããããã«ç§»åããŠãããã«ããã€ãã®æ°å€ã衚瀺ããŸãã ç¹ã«ã 䜿çšæžã¿ã¡ã¢ãªãšç©ºãã¡ã¢ãªããããŸã ã ãµãŒããŒäžã®ç©ºãã¡ã¢ãªã®éã«ã€ããŠã¯ãããŸããŸãªæèŠããããŸãã ããã¯5ïŒ ã§ãããšèãã人ãããŸãããå®éã«ã¯ã ç©çã¡ã¢ãªã®0ïŒ ãæšæºã§ã ãããã¯ã空ãã¡ã¢ãªã«ãŠã³ã¿ãšã¯å®éã«ã¯ãã¹ãŠã空ãã¡ã¢ãªã§ã¯ãªãããã§ãã ããã¯å®éã«ã¯ã¯ããã«å€§ãããéåžžã¯ããŒãžãã£ãã·ã¥ã«é ãããŠããã ãã§ãã
ããã»ã¹ã«é¢ããŠã topã¯3ã€ã®èå³æ·±ãåã瀺ããŠããŸãã
- ä»®æ³ã¡ã¢ãª ;
- åžžé§ã¡ã¢ãª ;
- å
±æã¡ã¢ãª ã
ãªã¹ãã®æåŸã®ã¡ã¢ãªã¯ãåã«å ±æãããŠããããŒãžã§ãã ãããã åžžé§ã¡ã¢ãªã§ã¯ããã¹ãŠãå°ãè€éã§ãã ãããã®ã¡ããªãã¯ã¹ã«ã€ããŠè©³ãã説æããŸãã

åã«ãèšã£ãããã«ã䜿çšæžã¿ã¡ã¢ãªãšç©ºãã¡ã¢ãªã¯ããªã圹ã«ç«ããªãã¡ããªãã¯ã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¯ãã¡ã€ã«ãã£ãã·ã¥ãããããããµãŒããŒã«ã¯ãŸã 䜿çšãããŠããªãã¡ã¢ãªããããŸããã¡ã¢ãªããŒãžã¯åžžã«ã¯ãªã¢ããããã¡ã€ã«ãã£ãã·ã¥ããããéèŠãªã¿ã¹ã¯ã«äœ¿çšãããããããã¹ãŠã®ææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã¹ãŠã®ç©ºãã¡ã¢ãªã䜿çšããŸãã ãããã£ãŠã ãã¹ãŠã®ç©ºãã¡ã¢ãªã¯åŸã ã«ãã£ãã·ã¥ã«ç§»åããæ»ã£ãŠããŸãã ã
ä»®æ³ã¡ã¢ãªã¡ããªãã¯ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èŠ³ç¹ããã¯ãŸã£ãããªãœãŒã¹ã§ã¯ãããŸããã 100ãã©ãã€ãã®ã¢ãã¬ã¹ã¹ããŒã¹ãç°¡åã«å²ãåœãŠãããšãã§ããŸããããã ãã§ãã ãããè¡ããšãã¢ãã¬ã¹Xããã¢ãã¬ã¹YãŸã§ã¹ããŒã¹ãäºçŽãããŠããããšãèªãã«æãããšãã§ããŸããããã以äžã¯ãããŸããã ãããã£ãŠãããããªãœãŒã¹ãšããŠèŠãŠãããšãã°ãããã»ã¹ã®ä»®æ³ãµã€ãºããããããå€ãè¶ ãããšããã¢ã©ãŒããèšå®ããããšã¯ç¡æå³ã§ãã
Javaã«æ»ããšãJVMã³ãŒãã¯ãããã®é åãã¢ãã¬ã¹ç©ºéã®èŠ³ç¹ããé£ç¶ããŠããããšãæåŸ ããŠããããããã¹ãŠã®ç¹å¥ãªé åãäºåã«äºçŽããŸãã ãã®ãããã¢ãã¬ã¹ã¯äºåã«ææã¡ããå¿ èŠããããŸãã ãã®ç¹ã§ã256 MBã®ããŒãã§ããã»ã¹ãéå§ãããšããã®ä»®æ³ãµã€ãºã2ã®ã¬ãã€ããè¶ ããŠããããšãçªç¶ããããŸãã ãããã®ã®ã¬ãã€ããå¿ èŠã§ãããJVMãããããå©çšã§ããããã§ã¯ãªããåã«ããã©ã«ãã«ããŸãã å°ãªããšããJVMãæžãã人ãã¡ã¯ããæã£ãŠããŸããã ãã ããããã¯ãåŸã§ãµãŒããŒãµããŒããæ±ã人ã ã®æèŠã«å¿ ããã察å¿ãããã®ã§ã¯ãããŸããã
åžžé§ãµã€ãº -çŸå®ã«æãè¿ãã¡ããªãã¯-ããã¯ãã¹ã¯ããã§ã¯ãªããã¡ã¢ãªå ã®ããã»ã¹ã«ãã£ãŠäœ¿çšãããã¡ã¢ãªããŒãžã®æ°ã§ãã ãããã圌女ãå°ãç¬ç¹ã§ãã

ãã£ãã·ã¥
ãã£ãã·ã¥ã«æ»ããŸãã åè¿°ããããã«ããã£ãã·ã¥ã¯ååãšããŠç©ºãã¡ã¢ãªã§ãããäŸå€ãååšããå ŽåããããŸãã ãã£ãã·ã¥å ã®ããŒãžãã¯ãªãŒã³ã§ããŒãã£ã§ããããïŒä¿åãããŠããªãå€æŽãå«ãïŒã ãã£ãã·ã¥å ã®ããŒãžãå€æŽãããå Žåãå¥ã®ç®çã§äœ¿çšããåã«ããŸãããŒãžããã£ã¹ã¯ã«æžã蟌ãå¿ èŠããããŸãã ãããŠãããã¯å šãç°ãªã話ã§ãã ããšãã°ãJVMã¯å€§èŠæš¡ãªããŒããã³ããæžã蟌ã¿ãŸãã 圌女ã¯ãã£ãããšãããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
- JVMã¯ã¡ã¢ãªã«ãã°ããæžã蟌ã¿ãŸãã
- ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã©ã€ãããã€ã³ããã£ãã·ã¥ã®äžã«ãããã¹ãŠã®ç©ºãã¡ã¢ãªãæäŸãããã®ã¡ã¢ãªã¯ãã¹ãŠãããŒãã£ãã§ãã
- ãã£ã¹ã¯ãžã®æžã蟌ã¿ãé
ãã
ãã®ãã³ãã®ãµã€ãºããµãŒããŒã®ç©çã¡ã¢ãªã®ãµã€ãºã«å¹æµããå Žåãä»ã®ãã¹ãŠã®ããã»ã¹ã«ç©ºãã¡ã¢ãªããªããšããç¶æ³ãçºçããå¯èœæ§ããããŸãã
ã€ãŸããããšãã°ãæ°ããsshã»ãã·ã§ã³ãéããŸããã·ã§ã«ããã»ã¹ãéå§ããã«ã¯ãã¡ã¢ãªãå²ãåœãŠãå¿ èŠããããŸãã ããã»ã¹ã¯èšæ¶ããã©ããã³ã¢ã¯åœŒã«ãåŸ ã£ãŠãã ãããä»ãç§ã¯äœããèŠã€ããŸãããšäŒããŸãã 圌ã¯ãããèŠã€ããŸãããããã®ããŒãžãSSHDã«æž¡ãåã«ãJavaã¯ããŒãžãã©ãŒã«ãã§ããã³ã°ããã空ãããŒãžã衚瀺ããããšããã«ããã®ã¡ã¢ãªãããã«ååŸããŸãä»ã®ããã»ã¹ã å®éã«ã¯ããã®ç¶æ³ã¯ãããšãã°ãç£èŠã·ã¹ãã ããsshãä»ããŠã¢ã¯ã»ã¹ã§ããªããšããã®ãµãŒããŒããã©ã€ããã§ã¯ãªããšåçŽã«å€æãããšããäºå®ã«ã€ãªãããŸããã ããããããã¯ãã¡ãã極端ãªã±ãŒã¹ã§ãã
ä»®æ³ãµã€ãºãšåžžé§ãµã€ãºã«å ããŠãLinuxããã»ã¹ã«ã¯ã³ãããæžã¿ ãµã€ãºããããŸããããã¯ãããã»ã¹ãå®éã«äœ¿çšããã¡ã¢ãªãã€ãŸãã¢ãã¬ã¹ç©ºéã§ããã¢ã¯ã»ã¹ããå Žåãã»ã°ã¡ã³ããŒã·ã§ã³éåã¯çºçããŸããã ã

çæ³çãªç¶æ³ã§ã¯ã ã³ãããã¡ã³ã ãš ã¬ãžãã³ãã¯åãã§ãªããã°ãªããŸãã ã ããããæåã«ãããŒãžã¯ãã¹ã¯ãããã§ããŸãã
第äºã«ãLinuxã®ã¡ã¢ãªã¯åžžã«é 延çã«å²ãåœãŠãããŸãã
- ããªãã¯åœŒã«èšããŸãïŒããé¡ãã10 GBãã 圌ã¯èšãïŒããããããŠãã ãããã
- å¥ã®ããã»ã¹ïŒã10 GBãæããŠãã ããã-ããé¡ãããŸããã
- 3çªç®ã®ããã»ã¹ïŒã10 GBãæäŸããŠãã ããã-ããè©Šããã ãããã
ãã®åŸãç©çã¡ã¢ãªã¯16åãããªãããšããããã圌ã¯ããããã¹ãŠã®10人ã«é åžããŸããããããŠããæåã«ã¹ãªãããåã£ã人ãã©ãããŒã§ã¯ãªã人ã¯ãOMKillerãæ¥ãã§ãããããšå§ãŸããŸãã ãããã¯ãLinuxã¡ã¢ãªç®¡çã®æ©èœã§ãã
JVMã«é¢ããéèŠãªäºå®
ãŸãã JVMã¯swapãæ¬åœã«å«ããŸãã äœããã®çç±ã§Javaã¢ããªã±ãŒã·ã§ã³ã®é床ãäœäžããŠãããšäžå¹³ãèšãå Žåãæåã«è¡ãããšã¯ããµãŒããŒã«ã¹ã¯ããããããã©ããã確èªããããšã§ãã Javaãã¹ã¯ããã³ã°ã«éåžžã«èããããªãèŠå ã¯2ã€ããããã§ãã
- Javaã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯åžžã«ããŒãžãä»ããŠå®è¡ãããåžžé§ããŒãžãããã¹ããããšãããŒãžããã£ã¹ã¯ããã¡ã¢ãªã«ããŸãã¯ãã®éã«è»¢éãããŸãã
- JVMã§å°ãªããšã1ã€ã®ã¹ã¬ãããã¡ã¢ãªå
ã«ãªãããŒãžã«ãã¹ãããã€ã³ããããšããã®JVMã®ãã¹ãŠã®ã¹ã¬ãããããªãŒãºããå¯èœæ§ããããŸãã
JVMãããããçš®é¡ã®ãã©ãã¯ããžãã¯ã«äœ¿çšããã»ãŒããã€ã³ãã¡ã«ããºã ããããŸããããšãã°ããªã³ã¶ãã©ã€ã§ã®ã³ãŒãã®åã³ã³ãã€ã«ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªã©ã§ãã 1ã€ã®ã¹ã¬ãããããŒãžãã©ãŒã«ãã«ãããããŠåŸ æ©ããå ŽåãJVMã¯ã¡ã¢ãªããŒãžã®ãå°çããåŸ æ©ããŠããã¹ã¬ãããã確èªãåãåããªããããéåžžã¯ã»ãŒããã€ã³ãç¶æ ã«å ¥ãããšãã§ããŸããã ãããŠãä»ã®ãã¹ãŠã®ãããŒã¯ãã§ã«åæ¢ããŠãããåŸ æ©ããŠããŸãã 誰ããç«ã£ãŠããã®äžå¹žãªã¹ããªãŒã ãåŸ ã£ãŠããŸãã ãããã£ãŠãããŒãžã³ã°ãéå§ãããšããã«ãããã©ãŒãã³ã¹ã®å€§å¹ ãªäœäžãå§ãŸãå ŽåããããŸãã
第äºã«ã Javaã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¡ã¢ãªã決ããŠãããããŸãã ã 圌女ã¯ããªããèš±ããç¯å²ã§äœ¿ããŸããããšããããã®ãªãœãŒã¹ãä»æ¬åœã«å¿ èŠãªããšããŠãã圌女ã¯ããããè¿ããªãã§ãããã ãããè¡ãæ¹æ³ãæè¡çã«ç¥ã£ãŠãããããããè¡ãããšãæåŸ ããŠããªãã¬ããŒãžã³ã¬ã¯ã¿ãŒãããŸãã
ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ã¯ãã®ããžãã¯ããããŸãã
CPUããŸãã¯ããå€ãã®ã¡ã¢ãªã ããªãã圌ã«10 GBã®äœ¿çšãèš±å¯ããå Žåã圌ã¯åççã«CPUãªãœãŒã¹ãç¯çŽã§ãããšä»®å®ããã¬ããŒãžãå«ããããã®10ã®ã¬ãã€ãã¯åŸ æ©ããŸãããCPUã¯ãããæ¹åããŸãããã¡ã¢ãªãã¯ãªãŒãã³ã°ããã®ã§ã¯ãªããæçšãªããšãè¡ããŸãã
ãã®ç¹ã§ã JVMã®ãµã€ãºãæ£ããåççã«èšå®ããããšãéèŠã§ãã ãŸããåãã³ã³ããå ã«è€æ°ã®ããã»ã¹ãããå Žåããããã®éã«ã¡ã¢ãªãªãœãŒã¹ãå²ãåœãŠãã®ãåççã§ãã
ããããªããšããã®ã³ã³ããå ã®ãã¹ãŠã圱é¿ãåããŸãã
ã¡ã¢ãªããªããªã£ããšã
ããã¯ããJavistsããšãLinuxoidsãã«ãã£ãŠéåžžã«ç°ãªã£ãŠèªèãããç¶æ³ã®ãã1ã€ã§ãã

Javaã§ã¯ãããã¯æ¬¡ã®ããã«çºçããŸãïŒãªããžã§ã¯ããå²ãåœãŠãæ°ããæŒç®åããããŸãïŒã¹ã©ã€ãäžã«ã¯å€§ããªé åã§ãïŒãããŒãã«ãã®å€§ããªé åã«ã¡ã¢ãªãå²ãåœãŠãã®ã«ååãªã¹ããŒã¹ããªãå Žåãã¡ã¢ãªäžè¶³ãšã©ãŒãçºçããŸãã

Linuxã§ã¯ãç¶æ³ã¯ç°ãªããŸãã ç§ãã¡ãèŠããŠããããã«ãLinuxã¯å®éãããå€ãã®ã¡ã¢ãªãç°¡åã«çŽæããããšãã§ããããã§äœæ¥ãéå§ããŸãïŒäžèšã®æ¡ä»¶ä»ãã³ãŒãïŒã ãŸããJVMãšã¯ç°ãªããcgroupsã¯ã©ãŒã¿ã®è¶ éã«ã€ããŠè©±ããŠããå Žåããšã©ãŒã¯çºçããŸããããéžæããOMKillerã®ããã»ã¹ã®ç°åžžçµäºãŸãã¯ã³ã³ããå šäœã®åæ¢ãçºçããŸãã
JVMã§ã¡ã¢ãªãäžè¶³ãããšã
ããã§ã¯ãããå°ãèŠãŠã¿ãŸãããã Javaã«ã¯ãããããè¥ããªããžã§ã¯ãã®é åãšå€ããªããžã§ã¯ãã®é åããããŸãã newæŒç®åãåŒã³åºããšããªããžã§ã¯ãã¯è¥ããªããžã§ã¯ãã®ã¹ããŒã¹ã«å²ãåœãŠãããŸãã è¥ããªããžã§ã¯ãã®ã¹ããŒã¹ã®ã¹ããŒã¹ããªããªã£ãå Žåãè¥ãã³ã¬ã¯ã·ã§ã³ãååã§ãªãå Žåãè¥ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãŸãã¯å®å šãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãçºçããŸã ã äžçªäžã®è¡ã¯ããŸããååãªã¡ã¢ãªããªãå Žåãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãçºçããããšã§ãã ãããŠãã¡ã¢ãªäžè¶³ãšã©ãŒãçºçããåã«ãå°ãªããšã1ã€ã®å®å šãªã¢ã»ã³ããªããã¹ããŸãã 10ã®ã¬ãã€ãã®ããŒãå šäœã§æ¥ãã§ããŸãã ãã«GCã¯ç¹å¥ãªã±ãŒã¹ã§ãããããå Žåã«ãã£ãŠã¯ã1ã€ã®ã¹ããªãŒã ã«ãå«ãŸããŸãã

åæã«ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ããããäœããã¹ã¯ã©ããããŸãã ãããããããheapã®ãµã€ãºã®5ïŒ æªæºã§ããå Žå ãããã¯ã人çã§ã¯ãªããåãªãèŠçãã§ããããããšã©ãŒãã¹ããŒãããŸãã ãã ãããšã©ãŒã«é¢ä¿ãªããã³ãŒãäœæè ããã®ã¹ã¬ãããåäœããããšã決å®ããã¹ã¬ããã§ãã®ã¡ã¢ãªäžè¶³ãšã©ãŒãçºçããå ŽåãäŸå€ããã£ããããããšã§ãã®èŠçãæ¡å€§ã§ããŸãã
äžè¬ã«ãã¡ã¢ãªäžè¶³ãšã©ãŒã·ã§ããã®åŸãJVMã¯ã©ã€ããšèŠãªãããªããªããŸãã å éšç¶æ ã¯ãã§ã«ç Žæ£ãããŠããå¯èœæ§ãããããã®ããã»ã¹ãããã«
-XX:OnOutOfMemoryError="kill -9 %p"
ã§ãããªãã·ã§ã³ïŒ
-XX:OnOutOfMemoryError="kill -9 %p"
ïŒããããŸãã ãã¥ã¢ã³ã¹ããããŸãã JVMã®ãµã€ãºãããã¯ã¹ã®ç©çã¡ã¢ãªã®ãµã€ãºã«å¹æµããå Žåããã®ã³ãã³ããåŒã³åºããšãã«ãã©ãŒã¯ããŸãã JVMã€ã¡ãŒãžãè€è£œãããŸãã ãããã£ãŠãLinuxã®èŠ³ç¹ããèŠããšãJVMã®ã¡ã¢ãªã¯å²ãåœãŠãæºåãã§ããŠããæ倧ã¡ã¢ãªå¶éããããã«è¶ ããå¯èœæ§ãããããã®ã³ãã³ãã¯æ©èœããŸããã ãã®åé¡ã¯ãããšãã°ã倧ããªããŒããã·ã§ã«ãä»ããŠPythonãèµ·åããããšããå Žåãªã©ãHadoopãµãŒããŒã«å žåçãªãã®ã§ãã åœç¶ããã®åããã»ã¹ã¯ããã»ã©å€ãã®ã¡ã¢ãªãå¿ èŠãšããããã©ãŒã¯ã ãã§ãã¹ãŠã®ã³ããŒãäœæãããã®åŸã§ã®ã¿äžèŠãªã¡ã¢ãªã解æŸããŸãã åžžã«ãåŸã§ãçºçããããã§ã¯ãããŸããã
å¥ã®ç¶æ³ããããããããŸãããããŒãããŸã æ倧ãµã€ãº ïŒ-XmxæªæºïŒã§ã¯ãªãå¯èœæ§ããããŸãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãååãªã¡ã¢ãªãåéããªãã£ããããJVMã¯ããŒããå¢ããå¿ èŠããããšå€æããŸããã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«è¡ããããã£ãšã¡ã¢ãªãããããšOSãèšã£ãïŒãããããã 確ãã«ãç§ãèšã£ãããã«ãLinuxã¯ãããèšã£ãŠããªãããä»ã®ã·ã¹ãã ã¯ããããŠããã JVMã®èŠ³ç¹ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¡ã¢ãªãå²ãåœãŠãéã®ãšã©ãŒã¯ãã¯ã©ãã·ã¥ã質åãªããå®è¡ãªãããã°ãªããæšæºã¯ã©ãã·ã¥ãã³ãã®ã¿ãããã»ã¹ã®å³æçµäºã§ãã
ãããããã€ã¬ã¯ãã¡ã¢ãªãããã¡ã«é¢é£ä»ããããŠããã¡ã¢ãªäžè¶³ã®2çªç®ã®ã¿ã€ãããããŸãã ãããã¯ãããŒãå€ã®ã¡ã¢ãªãåç §ããJavaã®ç¹å¥ãªãªããžã§ã¯ãã§ãã ãããã£ãŠã圌ãã¯ãŸãããããå²ãåœãŠããã®ã¡ã¢ãªã®ã©ã€ããµã€ã¯ã«ã管çããŸããã€ãŸããããã«ã¯ãŸã ç¹å®ã®ã¬ãŒãããžã³ã¬ã¯ã·ã§ã³ããããŸãã ãã®ãããªãããã¡ãŒãç¡éã«å€§éã®ã¡ã¢ãªãŒãå æã§ããªãããã«ãJVMãããèªäœã«èšå®ãããããã¡ãŒã«ã¯å¶éããããŸãã ä¿®æ£ãå¿ èŠã«ãªãå ŽåããããŸãããã¡ãããããžãã¯-XXãªãã·ã§ã³ããããŸãïŒäŸ
-XX:MaxDirectMemorySize=16g
ã éåžžã®ã¡ã¢ãªäžè¶³ãšã¯ç°ãªãããã®ã¡ã¢ãªäžè¶³ã¯ç¹å®ã®å Žæã§çºçããå¥ã®ã¿ã€ãã®ãšã©ãŒãšåºå¥ã§ãããããå埩å¯èœã§ãã
Javaã§ã¡ã¢ãªãå²ãåœãŠãŸã
æ¢ã«è¿°ã¹ãããã«ããã¹ãŠã®ã¬ããŒãžã³ã¬ã¯ã¿ãã¥ãŒãªã¹ãã£ãã¯ã¯ããã«åºã¥ããŠæ§ç¯ãããŠãããããæåã¯JVMã§äœ¿çšã§ããã¡ã¢ãªéãç¥ãããšãéèŠã§ãã
ãã°ã©ã åäœãã§å²ãåœãŠãã¡ã¢ãªéã¯é£ãã質åã§ãããäž»ãªãã€ã³ãã¯æ¬¡ã®ãšããã§ãã
- ã¡ã¢ãªå
ã«æ°žç¶çã«å¿
èŠãªæçšãªãªããžã§ã¯ãã®æ°ãç解ããå¿
èŠããããŸãïŒ ã©ã€ã ã»ãã ïŒã ããã¯çµéšçã«æãæ£ç¢ºã«æž¬å®ãããŸããã€ãŸããå¿
èŠã§ãã
- ãã¹ããè¡ããŸãã
- ããŒããã³ããè¡ããŸãã
- ããŒãã®æ§æèŠçŽ ãšããªã¯ãšã¹ãæ°ãŸãã¯ããŒã¿éã®å¢å ã«äŒŽã£ãŠããŒããã©ã®ããã«æé·ãããã確èªããŸãã
- è¥ãäžä»£ã¯ ãããã©ã«ãã§ããŒãã®å²åãšããŠååŸãããããåçã«èšå®ãããŸãã ããšãã°ã G1ã³ã¬ã¯ã¿ãŒãããã¯ã圌èªèº«ãè¥ãã¹ããŒã¹ã«é©ãããµã€ãºãéžæããæ¹æ³ãç¥ã£ãŠãããšããäºå®ã«åºã¥ããŠããŸãã æ®ãã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ã€ããŠã¯ãçµéšçãªèæ
®äºé
ã«åºã¥ããŠããããæã«å
¥ããæ¹ãé©åã§ãã
- ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãªã¶ãŒããå¿
èŠãšããŸããããã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãã¡ã¢ãªãŒå
ã®ã©ããã«ããå¿
èŠãããããã§ãã ãã¿ç®±ã®äžã«ããã¡ã¢ãªãå€ãã»ã©ã1 GBã®ç©ºãã¡ã¢ãªã«è²»ããããCPUãå°ãªããªããŸãã ãã®ãã©ã³ã¹ãããŒãã«æ»ããããšã¯ã§ããŸããã ãªã¶ãŒãã®ãµã€ãºã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœãšäœ¿çšãããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠç°ãªããŸããååãšããŠãããã¯30ã50ïŒ
ã§ãã
- åèšãåèšããŒããµã€ãºïŒ-XmxïŒã¯ä»¥äžã§æ§æãããŸãã
- è¥ãäžä»£ã®ãµã€ãºã
- ã©ã€ãã»ãããµã€ãº;
- äºåã
- è¥ãäžä»£ã®ãµã€ãºã
ããŒãã«å ããŠãçŽæ¥ãããã¡ãããçš®ã®JVMãªã¶ãŒããããããããçµéšçã«æ±ºå®ããå¿ èŠããããŸãã
ãããã£ãŠãããã»ã¹å šäœã®ãããããªã³ãã¯åžžã«-Xmxãè¶ ããŸãããããã¯åãªãå²åã§ã¯ãªããã¹ã¬ããæ°ãªã©ã®ããŸããŸãªèŠå ã®çµã¿åããã§ãã
Linuxã®ã¡ã¢ãªå²ãåœãŠ
ããã«ãLinuxã«ã¯ulimitã®ãããªãã®ããããŸã-ããã¯å¥åŠãªãã¶ã€ã³ã§ãç§ã®æèŠã§ã¯javistaã§ãã ããã»ã¹ã«ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãã£ãŠèšå®ãããã¯ã©ãŒã¿ã®ã»ããããããŸãã éããŠãããã¡ã€ã«ã®æ°ã«ã¯è«ççãªå¶éãããããã®ä»ã«ãããã€ãã®å¶éããããŸãã

ulimitsãããŸãæ©èœããªãã®ã¯ããªãœãŒã¹ç®¡çã®ããã§ããã³ã³ããã®ãªãœãŒã¹ãå¶éããããã«ãå¥ã®ããŒã«ã䜿çšãããŸãã Ulimitsã®æ倧ã¡ã¢ãªãµã€ãºã¯Linuxã§ã¯æ©èœããŸãããã æ倧仮æ³ã¡ã¢ãªãµã€ãºããããŸãã å ã»ã©èšã£ãããã«ãä»®æ³ã¡ã¢ãªã¯ãªãœãŒã¹ã§ã¯ãªããããããã¯éåžžã«èå³æ·±ãããšã§ãã åºæ¬çã«ã100 TBã®ã¢ãã¬ã¹ã¹ããŒã¹ãäºçŽãããšããäºå®ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã³ãŒã«ãã§ããããã§ããããŸããã ããããOSã¯ãããããããã»ã¹ã«é©åãªulimitãååŸãããŸã§ãããèš±å¯ããŸããã
ããã©ã«ãå€ã¯ç©çã¡ã¢ãªã®ãµã€ãºãšèŠãªãããããšãå€ããããããã©ã«ãã§ã¯ãç¹ã«JVMã®ãµã€ãºãç©çã¡ã¢ãªã«å¹æµããå Žåã¯ç¹ã«ããã®å¶éã«ããJVMãèµ·åããªããªããŸãã ããšãã°ããµãŒããŒã«500 GBããå Žåã400 GBã®JVMãèµ·åããããšãããšãããã€ãã®å¥åŠãªãšã©ãŒãçºçããŠã¯ã©ãã·ã¥ããŸãã ãããããJVMã¯éå§æã«ããããã¹ãŠã®ã¢ãã¬ã¹ã¹ããŒã¹ãèªåèªèº«ã«å²ãåœãŠãããæç¹ã§OSããããããããªãã¯ããããã®ã¢ãã¬ã¹ã¹ããŒã¹ãåããŸããããããªããããšèšããŸãã ãããŠãç§ãèšã£ãããã«ããã®å ŽåãJVMã¯ãæ»ã¬ãã ãã§ãã ãããã£ãŠããããã®ãã©ã¡ãŒã¿ãŒãæ§æããããšãå¿ããªãã§ãã ããã
ãµãŒããŒäžã®JVMã«20 GBãå²ãåœãŠãããŠããå Žåãä»®æ³ã¢ãã¬ã¹ç©ºéã®ãµã€ãºã20 GBã«èšå®ããå¿ èŠããããšäœããã®çç±ã§å€æããèšåºç¶æ³ããããŸãã JVMãäºçŽããã¡ã¢ãªã®äžéšã®ã»ã¯ã·ã§ã³ã¯äœ¿çšãããªããããããã¯åé¡ã§ããå€ãã®ã»ã¯ã·ã§ã³ããããŸãã ãããã£ãŠããã®ããã»ã¹ã®ã¡ã¢ãªãªãœãŒã¹ã¯ãæã£ãŠãããããã¯ããã«éãããŠããŸãã
ãããã£ãŠãç§ã¯Linuxoidsã«èšŽããŸãããããããªãã§ãã ãããããªãã®ããæã«åæ ããŠãã ããã
Dockerã«ã€ããŠäžèš
ã€ãŸããDockerèªäœã§ã¯ãªããã³ã³ããå ã®ãªãœãŒã¹ç®¡çã«é¢ãããã®ã§ãã Dockerã§ã¯ãã³ã³ããã®ãªãœãŒã¹ç®¡çã¯cgroupsã¡ã«ããºã ãéããŠæ©èœããŸãã ããã¯ã«ãŒãã«ã¡ã«ããºã ã§ãããããã»ã¹ããªãŒãCPUãã¡ã¢ãªãªã©ã®ããããçš®é¡ã®ãªãœãŒã¹ãå¶éã§ããããã«ããŸãã ã¡ã¢ãªãå«ããŠãã³ã³ããå šäœãå ããåžžé§ã¡ã¢ãªã®ãµã€ãºãã¹ã¯ããæ°ãããŒãžæ°ãªã©ãå¶éã§ããŸãããããã®å¶éã¯ãulimitãšã¯ç°ãªããã³ã³ããå šäœã«å¯Ÿããéåžžã®å¶éã§ãã ããã»ã¹ãäœããã®åããã»ã¹ãåå²ããå Žåããããã¯åããªãœãŒã¹å¶éã°ã«ãŒãã«åé¡ãããŸãã
éèŠãªããšïŒ
- Dockerã³ã³ããã§Javaãå®è¡ããå Žåããã¹ãäžã®ç©çã¡ã¢ãªã®éã調ã¹ãã³ã³ããã§ã¯ãªããã¹ãäžã®å®éã®ç©çã¡ã¢ãªã®éã«åºã¥ããŠãããã©ã«ãã®å¶éãèæ
®ããŸãã 圌女ã¯ããŸãäžããããŠããªãã®ã§ã圌女ã¯éåžžã«éãæ»ã«ãŸãã ãããã£ãŠã-Xmxã¯å¿
é ã§ããããããªããšãèµ·åããŸããã
- åžžã«ã³ã³ããã®äžã§ã JVMã® äžãããå°ãå€ãã®ã¡ã¢ãªãäžããå¿
èŠããããŸã ã 2 GBã®ã³ã³ãããŒãäœæãã
-Xmx2048m
ãã©ã¡ãŒã¿ãŒã䜿çšããŠJVMãèµ·åãããšããŸããã¡ã¢ãªãŒãé 延çã«å²ãåœãŠããããããäœããã®-Xmx2048m
åäœã-Xmx2048m
ãŸãã ããããå°ããã€ããããã®ãã¹ãŠã®ããŒãžãäœããã®åœ¢ã§äœ¿çšãããããã«ãªããæåã«ã³ã³ãããŒãããŒã«ã«ã¹ã¯ããã«ç§»åãå§ãããããçµäºããã ãã§ãã ãããŠã圌ã¯æé«ã®äŒçµ±ã§æ»ã¬- ãã æ¶ããŸãã
éå§ããã°ããã®å Žåã§ãããªãœãŒã¹ã¯æ¬åœã«é 延ããŠå²ãåœãŠããããããäœãæå³ããããŸããã
Javaã®ã¹ã¬ãã
Javaã®ã¹ã¬ããã«ã€ããŠã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®éåžžã®ã¹ã¬ããã§ããããšãç¥ã£ãŠããããšãéèŠã§ã ã æåã®JVMã§ã¯ãããããã°ãªãŒã³ã¹ã¬ãããå®è£ ãããŸãããå®éãã°ãªãŒã³ã¹ã¬ããã¯ãå®éã«ã¯Javaã¹ã¬ããã®ã¹ã¿ãã¯ãäœããã®åœ¢ã§çãç¶ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®1ã€ã®ã¹ã¬ããã1ã€ã®Javaã¹ã¬ãããå®è¡ãã次ã«å¥ã®ã¹ã¬ãããå®è¡ããŸããã ããã¯ãã¹ãŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«éåžžã®ãã«ãã¹ã¬ãããç»å ŽãããŸã§éçºãããŸããã ãã®åŸãã³ãŒãã¯ãã€ãã£ãã¹ã¬ããã§ããé©åã«åäœããããã誰ãããã°ãªãŒã³ãã¹ã¬ãããæªå€¢ãšããŠå¿ããŠããŸããã
ã€ãŸãã5000ãã¬ãŒã ã®ã¹ã¿ãã¯ãã¬ãŒã¹ã¯ãå®éã«ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãå²ãåœãŠãã¹ã¿ãã¯ã¹ããŒã¹ã«ãããŸãã Javaãããã€ãã£ãã³ãŒããåŒã³åºãå Žåããã®ã³ãŒãã¯Javaã³ãŒããšåãã¹ã¿ãã¯ã䜿çšããŸãã ããã¯ãLinuxã§å©çšå¯èœãªèšºæããŒã«ã䜿çšããŠãJavaã¹ã¬ããã§ãåäœã§ããããšãæå³ããŸãã
Javaã¹ã¬ãããèŠã€ããæ¹æ³

JVMã«psã³ãã³ãã䜿çšãããšããã¹ãŠã®ã¹ã¬ããã«åãååãä»ããããããããã®ãããªãããã«ããå³ã衚瀺ãããŸãã ãããå®éã«ã¯ãããã«é çªã«è¡ããŸãïŒ
- ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¹ã¬ããã
- ããããæäœã¹ã¬ããJVMã
- ã¢ããªã±ãŒã·ã§ã³ã¹ã¬ãã
ããããããã¯ã©ã³ãã ã§ãã

ã»ããšïŒ jstackã³ãã³ãã䜿çšããŠJVMããã¹ã¬ãããã³ããåé€ãããšã16é²æ°ã®ãTIDãã衚瀺ãããŸã ã ããã¯å®éã®Linuxã¹ã¬ããã®èå¥åã§ã ã ã€ãŸããã©ã®Javaã¹ã¬ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã©ã®ã¹ã¬ããã«å¯Ÿå¿ããããç解ããpsã解èªã§ããŸãã
å¯äžã®ããšã¯ããããè¡ãperlã¹ã¯ãªãããã©ã®ããã«èšè¿°ããããæ¢ã«ããã£ãŠããå Žåãã«ãŒãå ã§jstackãåŒã³åºããªãã§ãã ãããéã®æ¹ãè¯ãã§ãã jstackãåŒã³åºããã³ã«ããã¹ãŠã®JVMã¹ã¬ãããã°ããŒãã«ã«äžæåæ¢ããããã§ãã éåžžã®ç¶æ³ã§ã¯ãããã¯0.5ããªç§æªæºã®é«éã§ãããããã1ç§éã«20åå®è¡ãããšããã§ã«ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã
ãŸããç¬èªã®èšºæã€ã³ã¿ãŒãã§ãŒã¹ãåããJVMèªäœãããã®æ å ±ããã«ããããšãã§ããŸãã ç¹ã«ã ç§ã®ããŒã«ã䜿çšã㊠ããããããã®æ å ±ãååŸãã JVMã®ãããã¹ããªãŒã ãåçŽã«åºåã§ããŸãã CPUã®äœ¿çšã«å ããŠã圌ã¯JavaããŒãã¹ã¬ããã®ã¡ã¢ãªå²ãåœãŠã®åŒ·åºŠãåºåããæ¹æ³ãç¥ã£ãŠããŸãã
ç·æµé

Javaã¹ã¬ããã¯ãéåžžã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¹ã¬ããã§ãã JVMã®ææ°ããŒãžã§ã³ã§ã¯ã
PreserveFramePointer
ããŒã¯ãperfãªã©ã®ããŒã«ãJavaã¹ã¬ããã¹ã¿ãã¯ãæ£ãã解æã§ããããã«ããJITã³ã³ãã€ã©ãªãã·ã§ã³ã§ãã
GitHubã«ã¯ãã³ã³ãã€ã«ãããJavaã³ãŒãã®ã·ã³ãã«ããã®å Žã§ãšã¯ã¹ããŒãããåãããã©ãŒãã³ã¹ã䜿çšããŠãå®å šã«èªã¿åãå¯èœãªã³ãŒã«ã¹ã¿ãã¯ãååŸã§ãããããžã§ã¯ãããããŸãã
ãããŠãã¬ããŒãžã³ã¬ã¯ã¿ãŒã¹ã¬ããããŸã ããããšãå°ãæãåºããŠãã ããã
2ã€ã®CPUãå²ãåœãŠãã³ã³ãããããå Žåãã¬ããŒãžã³ã¬ã¯ã¿ã®äžŠåã¹ã¬ããã®æ°ã2ã«ããå¿ èŠããããŸããããã©ã«ãã§ã¯ããå€ãã®ã¹ã¬ããããããäºãã«å¹²æžããã ãã§ãã
äžæ¹ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã®å®è¡äžã¯ãä»ã®ãã¹ãŠã®ã¹ã¬ããã¯äœãããŸããã ãããã£ãŠãJavaã«å²ãåœãŠãã³ã³ãããªãœãŒã¹ã®100ïŒ ãã¬ããŒãžã³ã¬ã¯ã¿ã«å²ãåœãŠãããšãã§ããŸãã
IOãšãããã¯ãŒãã³ã°
Linuxãããã¯ãŒã¯ã¹ã¿ãã¯ã®ãã¥ãŒãã³ã°ãå¿ èŠã§ã ã ããšãã°ãNginxã䜿çšããããã³ããšã³ããµãŒããŒã«é¢ä¿ãã人ã¯ããããéåžžã«ããèŠããŠããŸãããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãšããã¯ãšã³ããµãŒããŒã§åãããšãè¡ããšããã§ãããã ãããŠãã·ã¹ãã ãå°ççã«åæ£ããã倧西æŽã暪æããããŒã¿è»¢éãéå§ããããŸã§ããã¹ãŠãæ£åžžã«æ©èœããŸãã ãã£ãšãçµå±ã®ãšããããããã¡ã®å¶éãå¢ããå¿ èŠããããŸããã

UDPéä¿¡ã䜿çšããå Žåã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã§åå¥ã®æ§æãå¿ èŠã§ãã ãœã±ããã®APIãä»ããŠã³ãŒãèªäœã§èšå®ããå¿ èŠããããªãã·ã§ã³ããããŸããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å¶éã¬ãã«ã§æå¹ã«ããå¿ èŠããããŸãã ããã§ãªããã°ãåã«æ©èœããŸããã
2çªç®ã®èå³æ·±ãç¹ã¯ã JVMã§ãªãœãŒã¹ãæäœããæ©èœã«é¢é£ããŠããŸãã
ãªãœãŒã¹ã«ã¯å¶éããããŸã-ããã»ã¹ã§ãœã±ãããååŸãããã¡ã€ã«æ°ãªã©ã®å¶éã ãã®å¶éãè¶ ããå Žåã次ã®ããšã¯ã§ããŸããã
- æ¥ç¶ãéããŸãã
- ãã¡ã€ã«ãéã;
- æ¥ç¶ãªã©ãåãå
¥ãã
Javaã§ã¯ããããã®ãªããžã§ã¯ããã¹ãŠã«ãããããæ瀺çã«éããŠãããã«å¿ããŠLinuxèšè¿°åã解æŸããããã®ã¡ãœããããããŸãã

ããããæ ãè ã®ãžã£ãã¹ãããããè¡ããªãã£ãå Žåãã¬ããŒãžã³ã¬ã¯ã¿ãŒãæ¥ãŠã圌ã®ããã«ãã¹ãŠãéããŸãã ãããŠããã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒãäºå®ã©ããã«ãªã£ãå Žåã¯ãã¹ãŠããŸããããŸããã圌ãé©åã ãšå€æãããšãã«åœŒãæ¥ãŸãã ãœã±ããå šäœãéãããœã±ããã§ãã£ã±ãã«ãªã£ãŠããå ŽåãããŒãã®èŠ³ç¹ããã¯ãããŒã§ãããã®ãœã±ããã®ã¡ã¿ããŒã¿ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã®èšè¿°åçªå·ãããªãããã§ãã ãããã£ãŠãJavaã³ãŒããåç §ãããããªå€éšãªãœãŒã¹ã®çµã¿åãããããå Žåãã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãã®ç¹ã§é©åã«åäœããªãããšããããŸãã
æ¥ç¶ãšãã¡ã€ã«ã¯åžžã«æäœæ¥ã§ã«ããŒããå¿ èŠããããŸãã
ãšã«ããããœã±ããã§ãšã©ãŒãçºçããå Žåã§ããäŸå€ããã£ããããåŸããœã±ãããéããå¿ èŠããããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èŠ³ç¹ããããšã©ãŒã³ãŒããè¿ãããJavaã§äŸå€ãåãåã£ããšããäºå®ã¯ããœã±ãããéããŠããããšãæå³ããªãããã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èŠ³ç¹ããã¯ã åŒãç¶ããªãŒãã³ã§ãããšèŠãªãã ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã次ã®åŒã³åºãããã§ãã¯ãããšãã«ãšã©ãŒã³ãŒããå床è¿ãæºåãæŽããŸãã ãããã£ãŠãäœãã誀ã£ãŠèšå®ãããœã±ãããé©åã«éããªãå Žåããã°ãããããšãã¡ã€ã«ã®å¶éãçµäºããã¢ããªã±ãŒã·ã§ã³ã¯éåžžã«æªãæããŸãã
JVMã«ã¯ãæ瀺çã«è§£æŸã§ããªããªãœãŒã¹ãããã€ããããŸãã
- ã¡ã¢ãªããããã¡ã€ã«ã
- NIOãã€ã¬ã¯ããããã¡ãŒã
ãããã£ãŠãæ éã«äœæ¥ããå¿ èŠããããŸããç Žæ£ããã®ã§ã¯ãªããåå©çšããããšããå§ãããŸãã 蚺æã®èŠ³ç¹ããããã®ãã¹ãŠã®æ å ±ãåŒãåºãããšãã§ããããŒããã³ãããããŸãã
ãããŠæåŸã«ãæåŸã®å¥ãã®èšèã

æ£ããJVMãµã€ãºãèšå®ããŸãã JVMèªäœã¯ãå¿ èŠãªã¡ã¢ãªéãç¥ããŸããã
ããŒã«ã®äœ¿ãæ¹ãåŠã³ãŸããããLinuxã«ã¯JavaãšããŸãæ©èœããããŒã«ããããJDKã«ã¯ã³ãã³ãã©ã€ã³ããå€ãã®æ å ±ãååŸã§ããããŒã«ããããŸãã Javaã«ã¯JMXïŒJava Management ExtensionsïŒèšºæã€ã³ã¿ãŒãã§ã€ã¹ããããŸãããããã䜿çšããã«ã¯ãå¥ã®Javaããã»ã¹ãå¿ èŠã§ããããã¯å¿ ããã䟿å©ã§ã¯ãããŸããã
ç¹ã«ãããŒã«ã®çµã¿åãããå¿ããªãã§ãã ããã ããšãã°ãLinuxã³ã¢ãã³ãJVMãããå ŽåãJDKããŒã«ã䜿çšããŠJavaã®ããŒããã³ããæœåºããã©ã€ãããã»ã¹ããçŽæ¥ãã®ããŒããã³ããè¡ã代ããã«ãéåžžã®Javaã¢ãã©ã€ã¶ãŒã§ããã確èªã§ããŸãã
æåŸã«ãããŸããŸãªãããã¯ãžã®ãªã³ã¯ãããã€ããããŸãã
Javaã¡ã¢ãªã®ãã¥ãŒãã³ã°ãšèšºæïŒ
- http://blog.ragozin.info/2016/10/hotspot-jvm-garbage-collection-options.html
- https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html
- Linuxã³ã¢ãã³ãã§ã®JDKããŒã«ã®äœ¿çš
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/bugreports004.html#CHDHDCJD
Linux Transparent Huge Pagesã®èªã¿åãïŒ
- https://www.perforce.com/blog/tales-field-taming-transparent-huge-pages-linux
- https://tobert.github.io/tldr/cassandra-java-huge-pages.html
- https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/
ãããã¡ã€ãªã³ã°ãšããã©ãŒãã³ã¹ç£èŠïŒ
é£çµ¡å ã®è©³çŽ°ïŒ
ãŸã 質åãããå Žåã¯ãé©åãªéšåã«ã¹ãããã§ããŸã
ã¬ããŒãã誰ããæ¢ã«ãããæå®ããŠããå¯èœæ§ããããŸãã
ããšãã
RIT ++ã¯æ¢ã«5æ28æ¥ãš29æ¥ã§ãã¹ã±ãžã¥ãŒã«ã¯ãã¡ãã§ããããã¯ãã±ããã®è³Œå ¥ãžã®çŽæ¥ãªã³ã¯ã§ãã
Highload ++ Siberiaã«ã¯ããå°ãæéãããã6æ25æ¥ãš26æ¥ã«éå¬ãããŸãã ãããã ããã°ã©ã ã¯ãã§ã«æŽ»çºã«åœ¢æãããŠããããããã¥ãŒã¹ã¬ã¿ãŒã賌èªããŠãææ°æ å ±ãå ¥æã§ããŸãã