ä»åã¯ãããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã°ãšãã®ãœãªã¥ãŒã·ã§ã³ã®åºæ¬çãªåé¡ãããæ·±ãæãäžããŠèª¿ã¹ãããšã«ããŸããã
ã©ãããå§ããã
-ååãBPFã«ã€ããŠè©³çŽ°ã«è©±ããLinuxã§ã®Javaããã©ãŒãã³ã¹ã®ç£èŠã®åé¡ã«ã€ããŠç°¡åã«èª¬æããŸããã ä»åã¯ãç¹å®ã®ããŒã«ã§ã¯ãªããåé¡ãšè§£æ±ºçãèŠã€ããããšã«éäžããããšæããŸãã æåã®è³ªåã¯ããããå¹³å¡ãªãã®ã§ãããããã©ãŒãã³ã¹ã«åé¡ãããããšãã©ã®ããã«ç解ããã®ã§ããïŒ ãŠãŒã¶ãŒãèŠæ ãèšã£ãŠããªãå Žåãç§ã¯ããã«ã€ããŠèããå¿ èŠããããŸããïŒ
Sasha GoldsteinïŒãŠãŒã¶ãŒãæå¥ãèšã£ããšãã ãããã©ãŒãã³ã¹ã«ã€ããŠèãå§ãããšã圌ãã¯é·ãããªããšäžç·ã«ããŸããã å€ãã®å Žåãããã©ãŒãã³ã¹ãšã³ãžãã¢ãªã³ã°ã¯ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãšå±æ©ã¢ãŒãã§ãã é»è©±ã鳎ããã©ã€ããç¹æ» ããã·ã¹ãã ãã¯ã©ãã·ã¥ããããŒããŒãããªã³ã«ãªããŸã-ããã©ãŒãã³ã¹ãšã³ãžãã¢ã®éåžžã®å€åæ¥ã å®éã«ã¯ã圌ãã¯å±æ©ã®èšç»ãèšèšãç£èŠãããã³é²æ¢ã«ã»ãšãã©ã®æéãè²»ãããŠããŸãã
ãŸãããã£ãã·ãã£ãã©ã³ãã³ã°ã¯ãäºæ³ãããã·ã¹ãã è² è·ãšãªãœãŒã¹äœ¿çšã®è©äŸ¡ã§ãã ã¹ã±ãŒã©ããªãã£ã®èšèšã¯ãããã«ããã¯ãåé¿ããè² è·ãå€§å¹ ã«å¢å ãããã®ã«åœ¹ç«ã¡ãŸãã èšè£ ãšç£èŠã¯ãã·ã¹ãã å ã§äœãèµ·ãã£ãŠããã®ããç解ããç²ç®çã«çºæããªãããã«ããããã«äžå¯æ¬ ã§ãã èªåéç¥ã®ã€ã³ã¹ããŒã«ã®ãããã§ããŠãŒã¶ãŒãèŠæ ãç³ãç«ãŠãåã§ãã£ãŠããååãšããŠçºçããåé¡ã«ã€ããŠç¢ºå®ã«ç¥ãããšãã§ããŸãã ãããŠãã¡ãããå€ç«ããå±æ©ããããããã¯ã¹ãã¬ã¹ã®å€ãç¶æ³ã§è§£æ±ºãããªããã°ãªããŸããã
ããŒã«ã¯çµ¶ããå€åããŠããŸãããããã»ã¹èªäœã¯å€æŽãããŠããªãããšã«æ³šæããŠãã ããã ããã€ãã®å ·äœäŸãæããŸããããèã®äžã§äžæã®çŽã§ã§ãã容éèšç»ã APMãœãªã¥ãŒã·ã§ã³ïŒNew RelicãPlumbrãªã©ïŒã䜿çšããŠããšã³ãããŒãšã³ãã®èšæž¬ãšç£èŠãè¡ããABãšJMeterã䜿çšããŠè¿ éãªè² è·ãã¹ããªã©ãè¡ãããšãã§ããŸãã 詳现ã«ã€ããŠã¯ãã©ã€ããµã€ã¯ã«ãšããã©ãŒãã³ã¹ã®æ¹æ³è«ã«é¢ããåªããæ å ±æºã§ããBrendan Greggã®èæžSystems Performanceãšãããã©ãŒãã³ã¹ã¬ãã«ã®èšå®ãšããã©ãŒãã³ã¹ã®ç£èŠã«é¢ãããããã¯ã®Google ã®ãµã€ãä¿¡é Œæ§ãšã³ãžãã¢ãªã³ã°ãã芧ãã ããã
-åé¡ãããããšãç解ãããšããŸãããïŒã©ãããå§ããã°ããã§ããïŒ å€ãã®äººïŒç¹ã«éããã®ããã©ãŒãã³ã¹ãšã³ãžãã¢ïŒã¯ããã«JMHãçºèŠãããã¹ãŠãå®å šã§ãªããããã«ãŒã³ã³ãã€ã©ãã«æžãæããæºåãã§ããŠããããã«æããŸãã ãã®åŸãäœãèµ·ãã£ãããèŠãŠãã ããã ããããå®éã«ã¯ãããããå§ããªãã»ããããã§ããïŒ
Sasha GoldsteinïŒããã¯ããªãäžè¬çãªæ¹æ³ã§ããã³ãŒããèšè¿°ããŠãããã¡ã€ã©ãŒã®åºæ¬çãªãã¹ããå®è¡ãããšããã³ãŒããå€æŽãããã³ã³ãã€ã©ãŒããããã³ã°ããããšã§ç°¡åã«ä¿®æ£ã§ããããã©ãŒãã³ã¹ã®åé¡ããããŸãã ããããç§ã®çµéšã«åºã¥ãã補åã§ã¯ãããã¯ããã»ã©é »ç¹ã«ã¯è¡ãããŸããã å€ãã®åé¡ã¯ã1ã€ã®ç°å¢ã®ã¿ã«åºæã®ãã®ã§ãããã¯ãŒã¯ããŒããã¿ãŒã³ã®å€æŽã«ãã£ãŠåŒãèµ·ããããããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãå€ã®ããã«ããã¯ã«é¢é£ä»ããããŸãããŸããã¹ããŒãããã¯ã«ãã£ãŠãœãŒã¹ã³ãŒãã¬ãã«ã§ãã€ã¯ããã³ãããã³æ¹åã§ããã®ã¯ããäžéšã§ãã
以äžã«ãããã€ãäŸã瀺ããŸãã
- æ°å¹ŽåãDatadogã¯ãPostgreSQLã§ããŒã¿ããŒã¹ã®æ¿å ¥ãšæŽæ°ã50ããªç§ãã800ããªç§ã«ãžã£ã³ããããšãã«åé¡ã«ééããŸããã 圌ãã¯SSDã§AWS EBSã䜿çšããŸããã ããã¯äœãäžããŸãããïŒ ããŒã¿ããŒã¹ã調æŽããããã¢ããªã±ãŒã·ã§ã³ã³ãŒããå€æŽããããã代ããã«ãEBSã¹ããããªã³ã°ããã¹ãŠã®åå ã§ããããšãããããŸãããããã©ãŒãã³ã¹å¶éã®å¯Ÿè±¡ãšãªãIOPSã¯ã©ãŒã¿ãè¶ ããå Žåã§ãã
- æè¿ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®é 延ã«é¢é£ãããµãŒããŒã®å¿çæéã®å€§å¹ ãªãžã£ã³ãã®åé¡ãæ±ãããŠãŒã¶ãŒãããŸããã ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãå¶åŸ¡äžèœã«ãªã£ãããã5ç§ä»¥äžããã£ããªã¯ãšã¹ãããããŸããïŒãããŠããããã¯å®å šã«å¶ç¶ã«èŠããŸããïŒã ã·ã¹ãã ã泚ææ·±ã調ã¹ãçµæããã¹ãŠãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªå²ãåœãŠãŸãã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®èª¿æŽã§æ£åžžã§ããããšãããããŸããã ã¯ãŒã¯ããŒãã®ãµã€ãºã®æ¥å¢ã«ãããå®éã®ã¡ã¢ãªäœ¿çšéãå¢å ããã¹ã¯ããã³ã°ãçºçããŸãããããã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®å®è£ ã«å®å šã«æ害ã§ãïŒã³ã¬ã¯ã¿ãã¢ã¯ãã£ããªããžã§ã¯ããããŒã¯ããããã«ã¡ã¢ãªããã³ãã³ã°ããã³ãã³ãã³ã°ããå¿ èŠãããå Žåãããã¯çµããã§ãïŒã
- æ°ãæåãSysdigã¯ã³ã³ããåé¢ã®åé¡ã«çŽé¢ããŠããŸãããã³ã³ããXã«é£æ¥ããŠãããããã³ã³ããYãå®è¡ãããã¡ã€ã«ã·ã¹ãã æäœã¯éåžžã«é ããäžæ¹ãäž¡æ¹ã®ã³ã³ããã®ã¡ã¢ãªäœ¿çšéãšããã»ããµè² è·ã¯éåžžã«äœãã£ãã§ãã å°ã調æ»ãããšãããã«ãŒãã«ãã£ã¬ã¯ããªãã£ãã·ã¥ãã³ã³ããXã§éè² è·ã«ãªãããã®åŸããã·ã¥ããŒãã«ã®è¡çªãçºçãããã®çµæãå€§å¹ ãªé床äœäžãçºçããããšãããããŸããã ç¹°ãè¿ããŸãããã¢ããªã±ãŒã·ã§ã³ã³ãŒããŸãã¯ã³ã³ãããªãœãŒã¹ã®å²ãåœãŠãå€æŽããŠãããã®åé¡ã¯è§£æ±ºããŸããã
å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãããã³ã°ãªã©ãå¶åŸ¡å¯èœãªãã®ã«éäžããæ¹ãã¯ããã«ç°¡åã§ããããšãç解ããŠããŸãã å¿ççã«ã¯ãããã¯ç解å¯èœã§ãããã·ã¹ãã ãç°å¢ã«é¢ããæ·±ãç¥èãå¿ èŠãšãããäœããã®çç±ã§äžéšã®æåã§ã¯ãããã¯ãŒã«ããšèŠãªãããŸãã ããããããããããã«å¯ŸåŠããã®ã¯ééã£ãŠããŸãã
-確ãã«ãæåã«ã¢ããªã±ãŒã·ã§ã³/ãµãŒãã¹ãæ¬çªç°å¢ã§ã©ã®ããã«æ©èœãããã確èªããå¿ èŠããããŸãã ããã«ã¯ã©ã®ããŒã«ããå§ãããŸããïŒ
Sasha GoldsteinïŒè£œåã®ã¢ãã¿ãªã³ã°ãšãããã¡ã€ãªã³ã°ã¯ãããŒã«ãšãã¯ããã¯ã®ã»ããã§ãã
ãªãœãŒã¹ïŒããã»ããµãã¡ã¢ãªããã£ã¹ã¯ããããã¯ãŒã¯ïŒã®äœ¿çšãšè² è·ç¹æ§ïŒïŒã¯ãšãªããšã©ãŒãã¯ãšãªã¿ã€ããïŒããŒã¿ããŒã¹ã¯ãšãªïŒã«çŠç¹ãåœãŠããé«ã¬ãã«ã®ããã©ãŒãã³ã¹ã®ã¡ããªãã¯ããå§ããŸãã æäœããã³ã©ã³ã¿ã€ã ããšã«ãã®ããŒã¿ãååŸããããã®æšæºããŒã«ããããŸãã ããšãã°ãLinuxã¯éåžžãvmstatãiostatãsarãifconfigãpidstatãªã©ã®ããŒã«ã䜿çšããŸãã JVMã®å ŽåãJMXããŒã¹ã®ããŒã«ãŸãã¯jstatã䜿çšããŸãã ãããã¯ããããã5ç§ãŸãã¯30ç§ééã§ããŒã¿ããŒã¹ã«ç¶ç¶çã«åéã§ããã¡ããªãã¯ã§ãããé£èºãåæããå¿ èŠã«å¿ããŠåã®å±éæäœããªãªãŒã¹ãã¯ãŒã«ãã€ãã³ãããŸãã¯ã¯ãŒã¯ããŒãã®å€æŽãçžé¢ãããããšãã§ããŸãã å€ãã®äººãå¹³åå€ã®ã¿ã®åéã«éäžããããšãéèŠã§ãã ãããã¯åªããŠããŸãããå®çŸ©äžã枬å®å¯Ÿè±¡ã®å®å šãªååžãè¡šããã®ã§ã¯ãããŸããã ããŒã»ã³ã¿ã€ã«ãåéããå¯èœã§ããã°ãã¹ãã°ã©ã ãåéããããšããå§ãããŸãã
次ã®ã¬ãã«ã¯éçšã¡ããªãã¯ã§ããéåžžã¯ãé·æéã«ããã£ãŠç¶ç¶çã«åéãŸãã¯ä¿åããããšã¯ã§ããŸããã ãããã«ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãã°ããããã¯ãŒã¯ã¯ãšãªãããŒã¿ããŒã¹ã¯ãšãªãã¯ã©ã¹ããŒããªã©ãå«ãŸããŸãã ãããã®ããŒã¿ãã©ããã«ä¿åããåŸã«ç解ããããšã¯ãåéãããããã¯ããã«é£ããå ŽåããããŸãã ãã ããããã«ããããããŒã¿ããŒã¹CPUã®è² è·ã100ïŒ ã«å¢å ãããšãã«ã©ã®ãããªçš®é¡ã®èŠæ±ãæ©èœãããããããã®èŠæ±ã®å®è¡äžã®ãã©ã€ãã®IOPSãšå¿çæéã¯ã©ãã§ããããªã©ã®è³ªåãããããšãã§ããŸãã ç¹ã«å¹³åã®åœ¢åŒã®æ°åã ãã§ã¯ããã®çš®ã®ç 究ãè¡ãããšã¯ã§ããŸããã
ãããŠæåŸã«ããããŒãã³ã¢ãã¬ãã«ïŒãµãŒããŒã®SSHïŒãŸãã¯ããŒã«ã®ãªã¢ãŒãèµ·åïŒã¯ããµãŒãã¹ã®éåžžã®éçšäžã«ä¿åã§ããªãå éšã¡ããªãã¯ãããã«åéããŸãã ãããã¯ãäžè¬ã«ãããã¡ã€ã©ãŒãšåŒã°ããããŒã«ã§ãã
Javaãããã¯ã·ã§ã³ã®ãããã¡ã€ãªã³ã°ã«ã¯ãå€ãã®ãªãŒããŒããããšé 延ãããããã ãã§ãªãããããã€ãããšã®ã§ããäžæ°å³ãªããŒã«ãå€æ°ãããŸãã ãšã³ã·ã¹ãã ã¯20幎åããååšããŠãããšããäºå®ã«ãããããããJVMã¢ããªã±ãŒã·ã§ã³ã®ãªãŒããŒããããäœããä¿¡é Œæ§ã®é«ããããã¡ã€ãªã³ã°ææ³ã¯ããããããããŸããã Andrey Panginã®éåæ ãããã¡ã€ã©ãŒã§ãã Richard Warburtonã®Honest Profilerããå§ãããŸãããã¡ãããç§ã®ãæ°ã«å ¥ãã¯perfã§ãã
ãšããã§ãå€ãã®ããŒã«ã¯ããã»ããµã®ãããã¡ã€ãªã³ã°ã«çŠç¹ãåœãŠãŠãããã©ã®ã³ãŒãå®è¡ãé«ãCPU䜿çšçãåŒãèµ·ããããç解ããŠããŸãã ããã¯çŽ æŽãããããšã§ãããå€ãã®å Žåãããã¯åé¡ã§ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠã®åå ãšãªãã³ãŒãå®è¡ãã¹ã衚瀺ã§ããããŒã«ãå¿ èŠã§ãïŒéåæãããã¡ã€ã©ãŒã§ããããã§ããããã«ãªããŸããïŒãããŒãžãšã©ãŒã®æ¬ èœããã£ãã·ã¥ãã¹ããã£ã¹ã¯ã¢ã¯ã»ã¹ããããã¯ãŒã¯èŠæ±ãããŒã¿ããŒã¹ã¯ãšãªããã®ä»ã®ã€ãã³ãã ãã®åéã«ç§ãæ¹ãã€ããã®ã¯ããŸãã«äœæ¥ç°å¢ãç 究ããããã®é©åãªããã©ãŒãã³ã¹ããŒã«ãèŠã€ããããšã®åé¡ã§ããã
Linuxã®Javaãããã¡ã€ãªã³ã°
-Java / Linuxã¹ã¿ãã¯ã®äžã§ã¯ã枬å®ã®ä¿¡é Œæ§ã«å€ãã®åé¡ããããšèããŸããã ãã£ãšããªãã¯äœãšããããšæŠãããšãã§ããŸãã ãããã©ããã£ãŠããã®ïŒ
Sasha GoldsteinïŒã¯ããããã¯æ²ããã§ãã çŸåšã®ç¶æ³ã¯æ¬¡ã®ããã«ãªããŸããæ¬ é¥ãèŠã€ããŠã¢ããªã±ãŒã·ã§ã³/ãµãŒãã¹ã®é床ãç解ããããã«ãã¹ãããå¿ èŠãããèšå€§ãªæ°ã®ç°ãªãéšåãåããé«éã³ã³ãã€ãŒã©ã€ã³ããããŸãã ãã¹ãŠã®éšåãå®å šã«ãã§ãã¯ããããšã¯ã§ããªããããäž»ãªæŠç¥ã¯1ç§éã«1ã€ã®éšåããã§ãã¯ãããã¹ãŠãæ£åžžãã©ããã確èªããããšã§ãããã®ãããŒããã®äžã«ãããå°ããªãŠã£ã³ããŠãã§ãããè¡ãå¿ èŠããããŸãã ããã§ããã ãããã調ã¹ãŠã¿ããšãã³ã³ãã¢ãã«ãã§çŸåšäœãèµ·ãã£ãŠãããã¯ããããŸããã ã³ã³ãã€ãŒãéæ³ã®ãã»ãŒããã¢ãŒãã«å ¥ããŸã§åŸ æ©ãããã®åŸã¯ãã¹ãŠèŠãããšãã§ããŸãã ãŸããã³ã³ãã¢ã¯è¿ãã«ããéã¯ãã»ãŒããã¢ãŒãã«å ¥ãããšãã§ããªããããå€ãã®éšåã衚瀺ãããããšã¯ãããŸããã ãŸãããŠã£ã³ããŠå ã®æ¬ é¥ãèŠã€ããããã»ã¹ã«ã¯5ç§ãããããããæ¯ç§ãããè¡ãããšã¯äžå¯èœã§ãã
ãã®ç¶æ ãäžå¿ã«ãJVMã®äžçã«ã¯å€ãã®ãããã¡ã€ã©ãŒãååšããŸãã YourKitãjstackãJProfilerãVisualVM-ãããã¯ãã¹ãŠãCPUãããã¡ã€ãªã³ã°ã«å¯ŸããŠåãã¢ãããŒããæ¡çšããŠããŸããã¹ã¬ãããµã³ããªã³ã°ãå®å šãªç¶æ ã§äœ¿çšããŸãã ããã¯ãææžåãããAPIã䜿çšããŠãã¹ãŠã®JVMã¹ã¬ãããäžæåæ¢ããã¹ã¿ãã¯ãã¬ãŒã¹ãååŸããæãããããªã¡ãœãããšã¹ã¿ãã¯ã§ã¬ããŒãããããã«åéããããšãæå³ããŸãã
ãã®ãããªããã»ã¹ã®äžæã®åé¡ã¯æ¬¡ã®ãšããã§ããã¹ã¬ããã¯ããã«ã¯åæ¢ãããã©ã³ã¿ã€ã ã¯å®å šãªç¶æ ã«éãããŸã§åŸ æ©ããŸãã ãã®çµæãã¢ããªã±ãŒã·ã§ã³ã®åã£ãç»åãååŸããç°ãªããããã¡ã€ã©ãŒããŸã äºãã«åæããªãå ŽåããããŸãïŒ
åãããã¡ã€ã©ãŒãåãã¯ãŒã¯ããŒãã§æãããããªã¡ãœããã«ã€ããŠç¬èªã®èŠ³ç¹ãæã£ãŠããå Žåããããã©ãã»ã©æªããã瀺ãç 究ããããŸãïŒMitkovichãããJavaãããã¡ã€ã©ãŒã®ç²ŸåºŠã®è©äŸ¡ãïŒã ããã«ãè€éãªSpringåŒã³åºãã¹ã¿ãã¯ã«1000åã®ã¹ã¬ãããããå Žåãã¹ã¿ãã¯ãã¬ãŒã¹ã®åéã«å€±æããããšããããããŸãã ãããã1ç§ããã10å以äžã§ãã ãã®çµæãã¹ã¿ãã¯ããŒã¿ã¯å®éã®ã¯ãŒã¯ããŒããšã¯ããã«ç°ãªããŸãã
ãã®ãããªåé¡ã解決ããã®ã¯ç°¡åã§ã¯ãããŸããããæè³ãã䟡å€ããããŸãã補åã®äžéšã®ã¯ãŒã¯ããŒãã¯ãäžèšã®ãããªãåŸæ¥ã®ãããŒã«ã䜿çšããŠãããã¡ã€ã«ã§ããŸããã
2ã€ã®åå¥ã®ã¢ãããŒããš1ã€ã®ãã€ããªããããããŸãã
- Richard Warburtonã®Honest Profilerã¯ãããã¥ã¡ã³ãåãããŠããªãå éšAPI AsyncGetCallTraceã䜿çšããŸããããã¯ãåäžã¹ã¬ããã®ã¹ã¿ãã¯ãã¬ãŒã¹ãè¿ããå®å šãªç¶æ ãžã®ç§»è¡ãå¿ èŠãšãããã·ã°ãã«ãã³ãã©ã䜿çšããŠåŒã³åºãããŸãã ããšããšã¯Oracle Developer Studioã«ãã£ãŠèšèšãããŸããã äž»ãªã¢ãããŒãã¯ãä¿¡å·ããã»ããµãã€ã³ã¹ããŒã«ããèšå®ãããæéïŒ100 Hzãªã©ïŒã®ä¿¡å·ã«ç»é²ããããšã§ãã 次ã«ãã·ã°ãã«ãã³ãã©å ã§çŸåšåäœããŠããã¹ã¬ããã®ã¹ã¿ãã¯ãã¬ãŒã¹ãååŸããå¿ èŠããããŸãã æããã«ãç¹ã«ã·ã°ãã«ãã³ãã©ã®ã³ã³ããã¹ãã§ã¯ãå¹ççãªã¹ã¿ãã¯ã¹ã¿ãã¯ããŒãžã«é¢ããŠå°é£ãªã¿ã¹ã¯ããããŸããããã®ã¢ãããŒãã¯ããŸãæ©èœããŸãã ïŒãã®ã¢ãããŒãã§ã¯ãåçšã©ã€ã»ã³ã¹ãå¿ èŠãªJFRã䜿çšããŸãïŒ
- Linux perfã¯ãã¹ã¿ãã¯ã®è±å¯ãªãµã³ããªã³ã°ãæäŸã§ããŸãïŒCPUåœä»€ã ãã§ãªãããã£ã¹ã¯ã¢ã¯ã»ã¹ããããã¯ãŒã¯èŠæ±ãªã©ã®ä»ã®ã€ãã³ãã«ãïŒã åé¡ã¯ãJavaã¡ãœããã®ã¢ãã¬ã¹ãã¡ãœããã®ååã«å€æããããšã§ããããã«ã¯ãperfãèªã¿åãããã³äœ¿çšã§ããããã¹ããã¡ã€ã«ïŒperfãããïŒãååŸããããã«JVMTIãšãŒãžã§ã³ããå¿ èŠã§ãã JITããã¬ãŒã ãã€ã³ã¿ãŒæå¶ã䜿çšããå Žåãã¹ã¿ãã¯ã®åæ§ç¯ã«ãåé¡ããããŸãã ãã®ã¢ãããŒãã¯ããŸããããããããŸããããæºåã¯ã»ãšãã©å¿ èŠãããŸããã ãã ãããã®çµæãJVMã¹ã¬ãããšJavaã¡ãœããã ãã§ãªããã«ãŒãã«ã¹ã¿ãã¯ãC ++ã¹ã¿ãã¯ãå«ããã¹ãŠã®ã¹ã¬ããã®ã¹ã¿ãã¯ãã¬ãŒã¹ãååŸã§ããŸãã
- Andrei Panginã®éåæãããã¡ã€ã©ãŒã¯2ã€ã®ã¢ãããŒããçµã¿åãããŠããŸãã äžé£ã®ããã©ãŒãã³ã¹ãã¿ãŒã³ãã€ã³ã¹ããŒã«ããŸãããã·ã°ãã«ãã³ãã©ãŒã䜿çšããŠAsyncGetStackTraceãåŒã³åºããJavaã¹ã¿ãã¯ãååŸããŸãã 2ã€ã®ã¹ã¿ãã¯ãçµã¿åããããšãã¹ããªãŒã ã§äœãèµ·ãã£ãŠããããå®å šã«ææ¡ã§ããJavaã¡ãœããåã®è§£æ±ºããã¬ãŒã ãã€ã³ã¿ãŒã®æå¶ã®åé¡ãåé¿ã§ããŸãã
ãããã®ãªãã·ã§ã³ã¯ããããã粟床ããªãœãŒã¹æ¶è²»ãããã³ã¬ããŒãé »åºŠã®ç¹ã§ãã»ãŒããã€ã³ããã€ã¢ã¹ãããã¡ã€ã©ãŒãããã¯ããã«åªããŠããŸãã ãããã¯è€éã«ãªãå¯èœæ§ããããŸããããªãŒããŒãããã®å°ãªããããã¯ã·ã§ã³ã®æ£ç¢ºãªãããã¡ã€ãªã³ã°ã¯åªåãã䟡å€ããããšæããŸãã
ã³ã³ããã®ãããã¡ã€ãªã³ã°
-ç°å¢ãšããã°ããã¹ãŠãã³ã³ããã«è©°ã蟌ãã®ãæµè¡ã«ãªã£ãŠããŸãããããã«äœãæ©èœã¯ãããŸããïŒ ã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ã䜿çšããéã«èŠããŠããã¹ãããšã¯äœã§ããïŒ
Sasha GoldsteinïŒã³ã³ããã«ã¯èå³æ·±ãåé¡ããããå€ãã®ããŒã«ãå®å šã«ç¡èŠããçµæãšããŠå®å šã«æ©èœããªããªããŸãã
Linuxã³ã³ããã¯ãã³ã³ãããŒã«ã°ã«ãŒããšåå空éãšãã2ã€ã®äž»èŠãªãã¯ãããžãŒãäžå¿ã«æ§ç¯ãããŠããããšãç°¡åã«æãåºããŠã¿ãŸãããã ç£èŠã°ã«ãŒãã䜿çšãããšãããã»ã¹ãŸãã¯ããã»ã¹ã®ã°ã«ãŒãïŒCPUæéã®äžéãã¡ã¢ãªã®å¶éãIOPSã¹ãã¬ãŒãžãªã©ïŒã®ãªãœãŒã¹ã¯ã©ãŒã¿ãå¢ããããšãã§ããŸãã ããŒã ã¹ããŒã¹ã¯ãã³ã³ããã®åé¢ãå¯èœã«ããŸãïŒããŠã³ãããŒã ã¹ããŒã¹ã¯ãåã³ã³ããã«ç¬èªã®ããŠã³ããã€ã³ãïŒå®éã«ã¯å¥ã®ãã¡ã€ã«ã·ã¹ãã ïŒãæäŸããPIDããŒã ã¹ããŒã¹-ç¬èªã®ããã»ã¹èå¥åããããã¯ãŒã¯ããŒã ã¹ããŒã¹ã¯åã³ã³ããã«ç¬èªã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãªã©ãæäŸããŸãã åå空éã®ãããå€ãã®ããŒã«ãã³ã³ããåãããJVMã¢ããªã±ãŒã·ã§ã³ãšé©åã«éä¿¡ããããšã¯å°é£ã§ãïŒãã ãããããã®åé¡ã®äžéšã¯JVMã«åºæã®ãã®ã§ã¯ãããŸããïŒã
ç¹å®ã®åé¡ã«ã€ããŠè°è«ããåã«ãJVMã®ããŒã«ã®ããŸããŸãªçš®é¡ã®å¯èŠ³æž¬æ§ã«ã€ããŠç°¡åã«èª¬æããæ¹ãè¯ãã§ãããã äžéšã«ã€ããŠèããããšããªãå Žåã¯ãç¥èãæŽæ°ããŠãã ããã
- jpsãjinfoãªã©ã®åºæ¬çãªããŒã«ã¯ ãæ¢åã®JVMããã»ã¹ãšãã®æ§æã«é¢ããæ å ±ãæäŸããŸãã
- jstackã¯ãæ¢åã®JVMããã»ã¹ããã¹ã¬ãããã³ãïŒã¹ã¿ãã¯ãã¬ãŒã¹ïŒãååŸããããã«äœ¿çšã§ããŸãã
- jmap-æ¢åã®JVMããã»ã¹ã®ããããã³ããŸãã¯ããåçŽãªã¯ã©ã¹ãã¹ãã°ã©ã ãååŸããŸãã
- jcmd㯠ã以åã®ãã¹ãŠã®ããŒã«ã眮ãæããJVMæ¥ç¶ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠæ¢åã®JVMããã»ã¹ã«ã³ãã³ããéä¿¡ããããã«äœ¿çšãããŸãã ããã¯ãJVMããã»ã¹ãšjcmdãããŒã¿ã亀æããããã«äœ¿çšããUNIXãã¡ã€ã³ãœã±ããã«åºã¥ããŠããŸãã
- jstat-ã¯ã©ã¹ã®ããŒããJITã³ã³ãã€ã«ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³çµ±èšãªã©ã®åºæ¬çãªJVMããã©ãŒãã³ã¹æ å ±ãç£èŠããããã ãã€ããªåœ¢åŒã®ãã®ããŒã¿ã䜿çšããŠ/ tmp / hsperfdata_ $ UID / $ PIDãã¡ã€ã«ãçæããJVMã«åºã¥ããŠããŸãã
- Serviceability Agentã¯ãJVMããã»ã¹ãã¹ã¬ãããã¹ã¿ãã¯ãªã©ã®ã¡ã¢ãªããã§ãã¯ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããã©ã€ãããã»ã¹ã ãã§ãªãã¡ã¢ãªãã³ããšãšãã«äœ¿çšã§ããŸãã ããã»ã¹ã¡ã¢ãªãšå éšããŒã¿æ§é ãèªã¿åãããšã§æ©èœããŸãã
- JMX ïŒç®¡ç察象BeanïŒã䜿çšããŠãæ¢åã®ããã»ã¹ããããã©ãŒãã³ã¹æ å ±ãåä¿¡ããããã³ãã³ããéä¿¡ããŠãã®åäœãå¶åŸ¡ãããã§ããŸãã
- JVMTIãšãŒãžã§ã³ãã¯ãã¯ã©ã¹ã®ããŒããã¡ãœããã®ã³ã³ãã€ã«ãã¹ã¬ããã®éå§/åæ¢ã競åã®ç£èŠãªã©ãããŸããŸãªèå³æ·±ãJVMã€ãã³ãã«åå ã§ããŸãã
ãã¹ãããã³ã³ããããããã¡ã€ãªã³ã°ããã³ç£èŠããéã«çºçããããã€ãã®åé¡ãšããããã解決ããæ¹æ³ã次ã«ç€ºããŸãïŒä»åŸãããã«ã€ããŠè©³ãã説æããŸãïŒã
- ã»ãšãã©ã®ããŒã«ã§ã¯ããªããžã§ã¯ããšå€ãæ€çŽ¢ããããã«ããã»ã¹ãã€ããªã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã ãããã¯ãã¹ãŠã³ã³ããã®ããŠã³ãåå空éã«ããããã¹ãããã¯ã¢ã¯ã»ã¹ã§ããŸããã äžéšã«ã¯ããã®ã¢ã¯ã»ã¹ã¯ãã³ã³ãããŒããã®ãã€ã³ãããŠã³ãã«ãã£ãŠããŸãã¯ã·ã³ãã«è§£æ±ºäžã«ãããã¡ã€ã©ãŒã§ã³ã³ãããŒã®ããŠã³ãåå空éãå ¥åããããšã«ãã£ãŠæäŸã§ããŸãïŒããã¯ã 以åã®ã€ã³ã¿ãã¥ãŒã§èª¬æããperfããã³BCCããŒã«ãçŸåšè¡ãããšã§ã ïŒã
- perfããããçæããJVMTIãšãŒãžã§ã³ãïŒperf-map-agentãªã©ïŒãããå Žåãã³ã³ããããã»ã¹IDïŒ/tmp/perf-1.mapãªã©ïŒã䜿çšããŠ/ tmpã³ã³ãããªããžããªã«æžã蟌ãŸããŸãã ããããã¡ã€ã«ã¯ãã¹ãããã¢ã¯ã»ã¹å¯èœã§ãªããã°ãªããããã¹ãã¯ãã¡ã€ã«åã«æ£ããããã»ã¹IDãåŸ ã€å¿ èŠããããŸãã ïŒç¹°ãè¿ããŸãããperfãšBCCã¯ãããèªåçã«è¡ãããšãã§ããŸãïŒã
- JVMæ¥ç¶ã€ã³ã¿ãŒãã§ãŒã¹ïŒjcmdãjinfoãjstackãããã³ãã®ä»ã®ããŒã«ãäŸåããïŒã«ã¯ãæ£ããPIDããã³ããŠã³ãåå空éæ¥ç¶ãã¡ã€ã«ãããã³JVMãšã®éä¿¡ã«äœ¿çšããããã¡ã€ã³ã®UNIXãœã±ãããå¿ èŠã§ãã ãã®æ å ±ã¯ãjattachãŠãŒãã£ãªãã£ã䜿çšããŠã¢ã¿ãããã¡ã€ã«ãäœæããã³ã³ããã®ããŒã ã¹ããŒã¹ãå ¥åãããããã¹ãäžã®å¯Ÿå¿ãããã£ã¬ã¯ããªããã€ã³ãããŠã³ãããŠã¹ã¯ããŒã«ã§ããŸãã
- jstatã䜿çšããJVMããã©ãŒãã³ã¹ããŒã¿ãã¡ã€ã«ïŒ/ tmp / hsperfdata_ $ UID / $ PIDïŒã䜿çšããã«ã¯ãã³ã³ãããŒåå空éãããŠã³ãããããã®ã¢ã¯ã»ã¹ãå¿ èŠã§ãã ããã¯ããã¹ãäžã®/ tmpã³ã³ããããã€ã³ãããŠã³ãããããšã§ç°¡åã«å¯ŸåŠã§ããŸãã
- JMXããŒã¹ã®ããŒã«ã䜿çšããæãç°¡åãªæ¹æ³ã¯ããããããªã¢ãŒãã®å Žåãšåæ§ã«JVMã«ã¢ã¯ã»ã¹ããããšã§ãããªã¢ãŒã蚺æã®å Žåãšåæ§ã«ãRMIãšã³ããã€ã³ããæ§æããŸãã
- Serviceability AgentããŒã«ã«ã¯ãJVMããã»ã¹ãšãã¹ãéã§æ£ç¢ºãªããŒãžã§ã³ã®äžèŽãå¿ èŠã§ãã ç¹ã«ç°ãªããã£ã¹ããªãã¥ãŒã·ã§ã³ã䜿çšããç°ãªãããŒãžã§ã³ã®JVMããã¹ãã«ã€ã³ã¹ããŒã«ãããŠããå Žåã¯ããã¹ãã§å®è¡ããªãã§ãã ããã
ããã§ããªãã¯æããããããŸããïŒããã©ãŒãã³ã¹ããŒã«ãã³ã³ããã«å ¥ããŠããããã®ãã¹ãŠã®åé¢åé¡ãç§ã®ããã«çºçããªãããã«ãããã©ãã§ããããïŒ èãæ¹ã¯æªããããŸããããå€ãã®ããŒã«ã¯seccompã®ããã«ãã®æ§æã§ã¯åäœããŸããã ããšãã°ãDockerã¯perf_event_openã·ã¹ãã ã³ãŒã«ãæåŠããŸããããã¯ãperfããã³async-profilerã䜿çšãããããã¡ã€ãªã³ã°ã«å¿ èŠã§ãã ãŸããJVMããã»ã¹å ã®ã¡ã¢ãªéãèªã¿åãããã«å€æ°ã®ããŒã«ã§äœ¿çšãããptraceã·ã¹ãã ã³ãŒã«ãæåŠããŸãã ãããã®ã·ã¹ãã ã³ãŒã«ãåãå ¥ããããã«seccompããªã·ãŒãå€æŽãããšããã¹ããå±éºã«ãããããŸãã ãŸããã³ã³ããã«ãããã¡ã€ãªã³ã°ããŒã«ãé 眮ããããšã«ããããã®æ»æ察象é åãå¢ãããŸãã
äŒè©±ãç¶ãããããã¡ã€ãªã³ã°ã«å¯Ÿããéã®åœ±é¿ã«ã€ããŠè©±ãåããããšæããŸãã...
Sashaã¯ãŸããªããµã³ã¯ãããã«ãã«ã¯ã«æ¥ãŠãå®çšŒåç°å¢ã§ã®JVMã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°ã«é¢ãããã¬ãŒãã³ã°ãå®æœãã Joker 2017ã«ã³ãã¡ã¬ã³ã¹ã§BPFã«ã€ããŠãã¬ãŒã³ããŒã·ã§ã³ãè¡ããŸãããããã£ãŠããããã¯ã®è©³çŽ°ãç¥ãããå Žåã¯ãSashaã«çŽæ¥äŒãæ©äŒããããŸãã