ããã€ãã®æè©
ä»æ¥ã2015幎3æ21æ¥ãç§ã¯æŠãã®ååãè¡ãããšã«ããŸããããOOMã®åŠçæ¹æ³ãç解ãå§ããäžè¬çã«ããŒããã³ããéžæããæ¹æ³ãåŠã¶æ¹æ³ã«ã€ããŠã®èšäºãæžãå§ããŸããïŒç§ã¯ããããåãªããã³ããšåŒã³ãŸããã¹ããŒããç°¡åã«ããããã«ãå¯èœãªéãè±åœäž»çŸ©ãé¿ããããšããŸãïŒã
ãã®èšäºãæžãäºå®ã ã£ããä»äºãã®éã¯1æ¥ã§ã¯ãªãããã«æããã®ã§ããã®èšäºã¯ãã®æ°é±éåŸã«è¡šç€ºãããã¯ãã§ãã
ãã®èšäºãæžãäºå®ã ã£ããä»äºãã®éã¯1æ¥ã§ã¯ãªãããã«æããã®ã§ããã®èšäºã¯
ãã®èšäºã§ã¯ãJavaã§ã®ãã³ãã®åŠçæ¹æ³ãOOMã®çºççç±ãç解ããæ¹æ³ããŸãã¯OOMã®çºççç±ã«è¿ã¥ããæ¹æ³ããã³ããåæããããŒã«ãããããç£èŠããããŒã«ïŒ1ã€ãã¯ãïŒãäžè¬çãªéçºã®ããã«ãã®åé¡ãæãäžããŠã¿ãŸãã JVisualVMïŒãã®ããã®ãã©ã°ã€ã³ãšOQLã³ã³ãœãŒã«ãæ€èšããŸãïŒãEclipse Memory Analyzing Toolãªã©ã®ããŒã«ãç 究ããŠããŸãã
圌ã¯ããããæžããããç§ã¯ãã¹ãŠãããžãã¹äžã«ããããšãé¡ã£ãŠããŸã:)
èæ¯
æåã«ãOOMã®çºçæ¹æ³ãç解ããå¿ èŠããããŸãã ããã¯èª°ã«ãç¥ãããŠããŸããã
ã¢ããªã±ãŒã·ã§ã³ã®å æRAMã«ã¯äžéããããšæ³åããŠãã ããã ã®ã¬ãã€ãã®RAMã«ããŸãã
ã¹ã¬ããã®ããããã§OOMãçºçãããšããããšã¯ããã®ç¹å®ã®ã¹ã¬ããããã¹ãŠã®ç©ºãã¡ã¢ãªããæ¶å»ãããããšãæå³ãããã®ã§ã¯ãªããOOMã«è³ã£ãã³ãŒããã®ãã®ãããã責ããããšãæå³ãããã®ã§ããããŸããã
ããã€ãã®ã¹ã¬ãããäœãã«åŸäºããã¡ã¢ãªãæ¶è²»ãããããå°ãããŠãç§ã¯ç Žè£ããŸããç¶æ ã«ããããååŸãããå®è¡ãå®äºããŠäžæåæ¢ãããšãã®ç¶æ³ã¯éåžžã«æ£åžžã§ãã ãããŠãã®æç¹ã§ãä»ã®ã¹ã¬ãããå°ããªäœæ¥ã®ããã«ã¡ã¢ãªãããã«èŠæ±ããããšã決å®ããŸããããã¡ãããã¬ããŒãžã³ã¬ã¯ã¿ã¯èšãã¿ãŸããããã¡ã¢ãªå ã®ã¬ããŒãžã¯èŠã€ãããŸããã§ããã ãã®å ŽåãOOMã¯ãã¹ã¿ãã¯ãã¬ãŒã¹ãã¢ããªã±ãŒã·ã§ã³ã¯ã©ãã·ã¥ã®ééã£ãç¯äººã瀺ããŠãããšãã«ãåé¡ã®åå ã«é¢ä¿ããªãã ãã§çºçããŸãã
å¥ã®ãªãã·ã§ã³ããããŸãã çŽ1é±éã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®åäœãæ¹åããŠãäžå®å®ãªåäœãæ¢ããæ¹æ³ã暡玢ããŠããŸããã ãããŠãç§ã¯ããããæŽçããã®ã«1ã2é±éãè²»ãããŸããã ç§ã¯ãããã®åé¡ã«å¯ŸåŠããã ãã§ã¯ãªãã£ãã®ã§ãåèšã§ãæ°é±éã®æéã1ã¶æåç¶ããŸããã
èŠã€ãã£ããã®ããïŒãµãŒãããŒãã£ã®ã©ã€ãã©ãªããããŠãã¡ãããã¹ãã¢ãããã·ãŒãžã£ã³ãŒã«ã«å«ãŸããŠããªããã®ããããŸãã
1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãçç¶ã¯æ¬¡ã®ãšããã§ããããµãŒãã¹ã®è² è·ã«å¿ããŠã1æ¥ãŸãã¯2æ¥ã§èœã¡ãŸãã ã¡ã¢ãªã®ç¶æ ãç£èŠãããšãã¢ããªã±ãŒã·ã§ã³ãåŸã ã«ããµã€ãºããå¢ãããŠãããããæç¹ã§åçŽã«æšªããã£ãŠããããšãæããã«ãªããŸããã
å¥ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããå°ãé¢çœãã§ãã é·ãéããŸãåäœãããããªããŒãããŠãã10ååŸã«å¿çãåæ¢ããããçªç¶èœã¡ãŠç©ºãã¡ã¢ãªããã¹ãŠãŽããªã³ã°ããå¯èœæ§ããããŸãïŒãããèŠããšæ¢ã«ããããŸãïŒã ãããŠãããŒãžã§ã³ãæŽæ°ããåŸãTomcatã®ããŒãžã§ã³ã7ãã8ã«å€æŽãããJREã®å Žåãéææ¥ã®1ã€ïŒ2é±é以äžåã«æ£åžžã«æ©èœããŠããïŒãçªç¶ããããèªããã®ã¯æ¥ãã¹ãããšãå§ããŸããã :)
ãã³ãã¯äž¡æ¹ã®ã¹ããŒãªãŒã§éåžžã«æçšã§ããããšãå€æããŸããããããã§ãJVisualVMïŒJVVMãšåŒã³ãŸãïŒãEclipse Memory Analyzing ToolïŒMATïŒãOQLïŒæ£ãã調çããæ¹æ³ãããããªããããããŸããïŒ MATã§ãããJVVMã§ã®OQLå®è£ ãšåéã«ãªãããããªããŸããã
ãã³ããããŠã³ããŒãããã«ã¯ã空ãRAMãå¿ èŠã§ãã ãã®ããªã¥ãŒã ã¯ãéãããŠãããã³ãã®ãµã€ãºã«èŠåã£ããã®ã§ãªããã°ãªããŸããã
éå§ãã
ã ãããç§ã¯ãã£ãããšã«ãŒããæããã«ãå§ããç§ã¯JVVMããå§ããŸãã

ãã®ããŒã«ãšjstatdããã³jmxã䜿çšãããšããµãŒããŒäžã®ã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœããªã¢ãŒãã§ç£èŠã§ããŸããããŒããããã»ããµãPermGenãã¹ã¬ãããšã¯ã©ã¹ã®æ°ãã¹ã¬ããã¢ã¯ãã£ããã£ããããã¡ã€ãªã³ã°ãå¯èœã§ãã
JVVMãæ¡åŒµå¯èœã§ãããMBeanã®ç£èŠãšå¯Ÿè©±ãããŒãã®è©³çŽ°ã®ç£èŠãã¢ããªã±ãŒã·ã§ã³ã®é·æç£èŠã®å®æœãé ã®äžã§ã®ä¿æãªã©ãããå€ãã®ãã®ãèš±å¯ãããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããããšã§ããã®æ©äŒã掻çšããŸããç£èŠã¿ãæéã§æäŸããããããã¡ããªãã¯æéã

ããã¯ãã€ã³ã¹ããŒã«ããããã©ã°ã€ã³ã®ã»ããã®ããã§ãã
Visual GCïŒVGCïŒã䜿çšãããšããããé¢é£ã®ã¡ããªãã¯ã衚瀺ã§ããŸãã
ãã®ç§ãã¡ã®Javaã®æ§æèŠçŽ ã®è©³çŽ°
2ã€ã®ç°ãªãã¢ããªã±ãŒã·ã§ã³ã®åäœã瀺ãVGCã¿ãã®2ã€ã®ã¹ã¯ãªãŒã³ã·ã§ããã次ã«ç€ºããŸãã
å·ŠåŽã«ã¯ãPerm GenãOld GenãSurvivor 0ãSurvivor 1ãEden Spaceãªã©ã®ãããã»ã¯ã·ã§ã³ããããŸãã
ãããã®ã³ã³ããŒãã³ãã¯ãã¹ãŠããªããžã§ã¯ããè¿œå ãããRAMã®é åã§ãã
PermGen-Permanent Generationã¯ãJavaã¯ã©ã¹ã®èª¬æãšããã€ãã®è¿œå ããŒã¿ãæ ŒçŽããããã«èšèšãããJVMã®ã¡ã¢ãªé åã§ãã
Old Genã¯ãSurvivorãšãªã¢ã®å Žæããå Žæãžã®ããã€ãã®ã·ãããçãæ®ã£ãããªãå€ããªããžã§ã¯ãã®ã¡ã¢ãªãšãªã¢ã§ãããå¥ã®èŒžè¡ã®æç¹ã§ããå€ãããªããžã§ã¯ãã®ãšãªã¢ã«åé¡ãããŸãã
ãµãã€ããŒ0ãš1ã¯ãEden Spaceã§ãªããžã§ã¯ããäœæããåŸããã®ã¯ãªãŒãã³ã°ãçãæ®ã£ããã€ãŸããEden Spaceãã¬ããŒãžã³ã¬ã¯ã¿ãŒïŒGCïŒã«ãã£ãŠã¯ãªãŒãã³ã°ãããæç¹ã§ãŽãã«ãªããªãã£ããªããžã§ã¯ããå«ãé åã§ãã Eden Spaceã®ã¯ãªãŒãã³ã°ãéå§ãããã³ã«ãçŸåšã¢ã¯ãã£ããªSurvivorã®ãªããžã§ã¯ããããã·ãã«è»¢éãããããã«æ°ãããªããžã§ã¯ããè¿œå ãããŸãããã®åŸãSurvivorsã®ã¹ããŒã¿ã¹ãå€æŽãããããã·ããã¢ã¯ãã£ãã«ãªããã¢ã¯ãã£ããããã·ãã«ãªããŸãã
Eden Spaceã¯ãæ°ãããªããžã§ã¯ããçæãããã¡ã¢ãªé åã§ãã ãã®é åã«ååãªã¡ã¢ãªããªãå ŽåãGCãµã€ã¯ã«ãéå§ãããŸãã
ãããã®åé åã¯ãã¢ããªã±ãŒã·ã§ã³äžã«ä»®æ³ãã·ã³èªäœã§ãµã€ãºã調æŽã§ããŸãã
ããšãã°ã-Xmxã2ã®ã¬ãã€ãã«æå®ããå Žåãããã¯2ã®ã¬ãã€ããã¹ãŠãããã«å æãããããšãæå³ããŸããïŒãã¡ãããã¡ã¢ãªãç©æ¥µçã«æ¶è²»ããäœããããã«éå§ããªãéãïŒã ä»®æ³ãã·ã³ã¯æåã«èªèº«ããã§ãã¯ããããšããŸãã
3çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãé±æ«ã«ã¯äœ¿çšãããªãã¢ããªã±ãŒã·ã§ã³ã®éã¢ã¯ãã£ããªæ®µéã瀺ããŠããŸããEdenã¯åçã«æé·ããSurvivorsã¯å®æçã«ã·ããããOldã¯å®è³ªçã«æé·ããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯90æé以äžåäœããååãšããŠãJVMã¯ã¢ããªã±ãŒã·ã§ã³ãããã»ã©å¿ èŠãšããªããšèããŠãããçŽ540 MBã§ãã
ä»®æ³ãã·ã³ããããçšã«ããã«å€ãã®ã¡ã¢ãªãå²ãåœãŠãããŒã¯ç¶æ³ããããŸããããããã¯ä»ã®ãèæ ®ãããªãããã®ã§ãããšæããŸããããã«ã€ããŠã¯ä»¥äžã§è©³ãã説æããŸãããŸãã¯ãããšãã°ãä»®æ³ãã·ã³ãEdenã«ããå€ãã®ã¡ã¢ãªãå²ãåœãŠãŠããå ŽåããããŸããã®ããããã®äžã®ãªããžã§ã¯ãã¯ã次ã®ã¯ãªãŒãã³ã°ãµã€ã¯ã«ã®åã«ãŽãã«ãªãæéããããŸãã
次ã®ã¹ã¯ãªãŒã³ã·ã§ããã§èµ€ã§ããŒã¯ããé åã¯ãäžéšã®ãªããžã§ã¯ããã¡ã¢ãªããããæ©ãåé€ãããããã«ã¬ããŒãžã«ãªãæéããªãããŸã ãªãŒã«ãã«ãªã£ãŠããå Žåã«ããªãŒã«ãã®å¢å ã§ãã éãé åã¯äŸå€ã§ãã ããªãã¯èµ€ãé åã®äžã«æ«ãèŠãããšãã§ããŸã-ããã¯ãšãã³ã®æ¯ãèãã§ãã
éãã»ã¯ã·ã§ã³ã®éçšã§ãä»®æ³ãã·ã³ã¯æãå¯èœæ§ãé«ããšå€æããã®ã¯ãEdenãšãªã¢ã®ãµã€ãºã倧ããããå¿ èŠãããããã§ãããã¬ãŒãµãŒãæ¡å€§ãããšãGCããé¢ãããåæ¢ãã以åã®ãããªå°ããªæ¯åããªããæ¯åãé ããªããçããã
2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã«ç§»ããŸãããã
ãã®äžã§ããšãã³ã¯ãã¹ãã€ã¯ãåããã¢ãªãŒãã§ããMortal Kombatã®ããã¬ãã«ãæãåºãããŸãã ãã®ããã«æãã...ãããŠãGCã¹ã±ãžã¥ãŒã«ã¯NFS Hot Pursuitããã®æ¥äžæã§ããããããã¯ãŸã 暪ã°ãã§ãã
ãšãªã¢åã®å³åŽã®æ°åã¯æ¬¡ã®ããšã瀺ããŠããŸãã
1ïŒEdenã®ãµã€ãºã¯50ã¡ã¬ãã€ãã§ãããã°ã©ãã®æåŸã«æãããŠãããã®ã¯ãçŸæç¹ã§ã®æåŸã®å€ã¯25ã¡ã¬ãã€ãã§ãã åèšã§ãæ倧546ã¡ã¬ãã€ããŸã§æ¡åŒµã§ããŸãã
2ïŒOldã¯æ倧1.333ã®ã¬ãã€ããŸã§æé·ã§ããŸãããçŸåšã¯405 MBãå æãã145.5 MBã§è©°ãŸã£ãŠããŸãã
ãŸãããµãã€ããŒãšãªã¢ãšããŒããžã§ãã¬ãŒã·ã§ã³çšã
æ¯èŒã®ããã«-ããã¯ã2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã®75æéã®ãã¬ãŒãµãŒãã£ãŒãã§ããããããçµè«ãåŒãåºãããšãã§ãããšæããŸãã ããšãã°ããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã§ãŒãºã¯å¶æ¥æ¥ã®åå8æ30åããååŸ5æ30åãŸã§ã§ãããé±æ«ã§ãæ©èœããããšã確èªããŸã:)
ã¢ããªã±ãŒã·ã§ã³ã§çªç¶å€ãé åãäžæ¯ã«ãªã£ãããšã確èªããå ŽåããªãŒããŒãããŒãããŸã§åŸ ã£ãŠã¿ãŠãã ãããã»ãšãã©ã®å Žåããã§ã«ãŽãã§ãã£ã±ãã§ãã
ã¬ããŒãžã¯ãä»ã®ãªããžã§ã¯ãããã¢ã¯ãã£ãã«åç §ãããªããªããžã§ã¯ãããŸãã¯ãã®ãããªãªããžã§ã¯ãã®è€åäœå šäœã§ãïŒããšãã°ãçžäºæ¥ç¶ããããªããžã§ã¯ãã®ããçš®ã®ãã¯ã©ãŠããã¯ããªã³ã¯ã®ã»ããããã®ãã¯ã©ãŠããå ã§ã¯ãªãããã®ãã¯ã©ãŠããå ã®1ã€ã®ãªããžã§ã¯ãã¯ãå€éšããåç §ããŸããïŒã
ããã¯ãã°ãŒã°ã«æ€çŽ¢äžã«è¡é¢ç¯ã®æ§é ã«ã€ããŠåŠãã ããšãç°¡åã«èªã£ããã®ã§ãã


2ã€ã®ç°ãªãã¢ããªã±ãŒã·ã§ã³ã®åäœã瀺ãVGCã¿ãã®2ã€ã®ã¹ã¯ãªãŒã³ã·ã§ããã次ã«ç€ºããŸãã
å·ŠåŽã«ã¯ãPerm GenãOld GenãSurvivor 0ãSurvivor 1ãEden Spaceãªã©ã®ãããã»ã¯ã·ã§ã³ããããŸãã
ãããã®ã³ã³ããŒãã³ãã¯ãã¹ãŠããªããžã§ã¯ããè¿œå ãããRAMã®é åã§ãã
PermGen-Permanent Generationã¯ãJavaã¯ã©ã¹ã®èª¬æãšããã€ãã®è¿œå ããŒã¿ãæ ŒçŽããããã«èšèšãããJVMã®ã¡ã¢ãªé åã§ãã
Old Genã¯ãSurvivorãšãªã¢ã®å Žæããå Žæãžã®ããã€ãã®ã·ãããçãæ®ã£ãããªãå€ããªããžã§ã¯ãã®ã¡ã¢ãªãšãªã¢ã§ãããå¥ã®èŒžè¡ã®æç¹ã§ããå€ãããªããžã§ã¯ãã®ãšãªã¢ã«åé¡ãããŸãã
ãµãã€ããŒ0ãš1ã¯ãEden Spaceã§ãªããžã§ã¯ããäœæããåŸããã®ã¯ãªãŒãã³ã°ãçãæ®ã£ããã€ãŸããEden Spaceãã¬ããŒãžã³ã¬ã¯ã¿ãŒïŒGCïŒã«ãã£ãŠã¯ãªãŒãã³ã°ãããæç¹ã§ãŽãã«ãªããªãã£ããªããžã§ã¯ããå«ãé åã§ãã Eden Spaceã®ã¯ãªãŒãã³ã°ãéå§ãããã³ã«ãçŸåšã¢ã¯ãã£ããªSurvivorã®ãªããžã§ã¯ããããã·ãã«è»¢éãããããã«æ°ãããªããžã§ã¯ããè¿œå ãããŸãããã®åŸãSurvivorsã®ã¹ããŒã¿ã¹ãå€æŽãããããã·ããã¢ã¯ãã£ãã«ãªããã¢ã¯ãã£ããããã·ãã«ãªããŸãã
Eden Spaceã¯ãæ°ãããªããžã§ã¯ããçæãããã¡ã¢ãªé åã§ãã ãã®é åã«ååãªã¡ã¢ãªããªãå ŽåãGCãµã€ã¯ã«ãéå§ãããŸãã
ãããã®åé åã¯ãã¢ããªã±ãŒã·ã§ã³äžã«ä»®æ³ãã·ã³èªäœã§ãµã€ãºã調æŽã§ããŸãã
ããšãã°ã-Xmxã2ã®ã¬ãã€ãã«æå®ããå Žåãããã¯2ã®ã¬ãã€ããã¹ãŠãããã«å æãããããšãæå³ããŸããïŒãã¡ãããã¡ã¢ãªãç©æ¥µçã«æ¶è²»ããäœããããã«éå§ããªãéãïŒã ä»®æ³ãã·ã³ã¯æåã«èªèº«ããã§ãã¯ããããšããŸãã
3çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãé±æ«ã«ã¯äœ¿çšãããªãã¢ããªã±ãŒã·ã§ã³ã®éã¢ã¯ãã£ããªæ®µéã瀺ããŠããŸããEdenã¯åçã«æé·ããSurvivorsã¯å®æçã«ã·ããããOldã¯å®è³ªçã«æé·ããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯90æé以äžåäœããååãšããŠãJVMã¯ã¢ããªã±ãŒã·ã§ã³ãããã»ã©å¿ èŠãšããªããšèããŠãããçŽ540 MBã§ãã

ä»®æ³ãã·ã³ããããçšã«ããã«å€ãã®ã¡ã¢ãªãå²ãåœãŠãããŒã¯ç¶æ³ããããŸããããããã¯ä»ã®ãèæ ®ãããªãããã®ã§ãããšæããŸããããã«ã€ããŠã¯ä»¥äžã§è©³ãã説æããŸãããŸãã¯ãããšãã°ãä»®æ³ãã·ã³ãEdenã«ããå€ãã®ã¡ã¢ãªãå²ãåœãŠãŠããå ŽåããããŸããã®ããããã®äžã®ãªããžã§ã¯ãã¯ã次ã®ã¯ãªãŒãã³ã°ãµã€ã¯ã«ã®åã«ãŽãã«ãªãæéããããŸãã

次ã®ã¹ã¯ãªãŒã³ã·ã§ããã§èµ€ã§ããŒã¯ããé åã¯ãäžéšã®ãªããžã§ã¯ããã¡ã¢ãªããããæ©ãåé€ãããããã«ã¬ããŒãžã«ãªãæéããªãããŸã ãªãŒã«ãã«ãªã£ãŠããå Žåã«ããªãŒã«ãã®å¢å ã§ãã éãé åã¯äŸå€ã§ãã ããªãã¯èµ€ãé åã®äžã«æ«ãèŠãããšãã§ããŸã-ããã¯ãšãã³ã®æ¯ãèãã§ãã

éãã»ã¯ã·ã§ã³ã®éçšã§ãä»®æ³ãã·ã³ã¯æãå¯èœæ§ãé«ããšå€æããã®ã¯ãEdenãšãªã¢ã®ãµã€ãºã倧ããããå¿ èŠãããããã§ãããã¬ãŒãµãŒãæ¡å€§ãããšãGCããé¢ãããåæ¢ãã以åã®ãããªå°ããªæ¯åããªããæ¯åãé ããªããçããã

2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã«ç§»ããŸãããã

ãã®äžã§ããšãã³ã¯ãã¹ãã€ã¯ãåããã¢ãªãŒãã§ããMortal Kombatã®ããã¬ãã«ãæãåºãããŸãã ãã®ããã«æãã...ãããŠãGCã¹ã±ãžã¥ãŒã«ã¯NFS Hot Pursuitããã®æ¥äžæã§ããããããã¯ãŸã 暪ã°ãã§ãã
ãšãªã¢åã®å³åŽã®æ°åã¯æ¬¡ã®ããšã瀺ããŠããŸãã
1ïŒEdenã®ãµã€ãºã¯50ã¡ã¬ãã€ãã§ãããã°ã©ãã®æåŸã«æãããŠãããã®ã¯ãçŸæç¹ã§ã®æåŸã®å€ã¯25ã¡ã¬ãã€ãã§ãã åèšã§ãæ倧546ã¡ã¬ãã€ããŸã§æ¡åŒµã§ããŸãã
2ïŒOldã¯æ倧1.333ã®ã¬ãã€ããŸã§æé·ã§ããŸãããçŸåšã¯405 MBãå æãã145.5 MBã§è©°ãŸã£ãŠããŸãã
ãŸãããµãã€ããŒãšãªã¢ãšããŒããžã§ãã¬ãŒã·ã§ã³çšã
æ¯èŒã®ããã«-ããã¯ã2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã®75æéã®ãã¬ãŒãµãŒãã£ãŒãã§ããããããçµè«ãåŒãåºãããšãã§ãããšæããŸãã ããšãã°ããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã§ãŒãºã¯å¶æ¥æ¥ã®åå8æ30åããååŸ5æ30åãŸã§ã§ãããé±æ«ã§ãæ©èœããããšã確èªããŸã:)

ã¢ããªã±ãŒã·ã§ã³ã§çªç¶å€ãé åãäžæ¯ã«ãªã£ãããšã確èªããå ŽåããªãŒããŒãããŒãããŸã§åŸ ã£ãŠã¿ãŠãã ãããã»ãšãã©ã®å Žåããã§ã«ãŽãã§ãã£ã±ãã§ãã
ã¬ããŒãžã¯ãä»ã®ãªããžã§ã¯ãããã¢ã¯ãã£ãã«åç §ãããªããªããžã§ã¯ãããŸãã¯ãã®ãããªãªããžã§ã¯ãã®è€åäœå šäœã§ãïŒããšãã°ãçžäºæ¥ç¶ããããªããžã§ã¯ãã®ããçš®ã®ãã¯ã©ãŠããã¯ããªã³ã¯ã®ã»ããããã®ãã¯ã©ãŠããå ã§ã¯ãªãããã®ãã¯ã©ãŠããå ã®1ã€ã®ãªããžã§ã¯ãã¯ãå€éšããåç §ããŸããïŒã
ããã¯ãã°ãŒã°ã«æ€çŽ¢äžã«è¡é¢ç¯ã®æ§é ã«ã€ããŠåŠãã ããšãç°¡åã«èªã£ããã®ã§ãã
èæ¯
ãã®ããã2ã€ã®ããšãåæã«èµ·ãããŸããã
1ïŒéææ¥ã®ããããã§æ°ããã©ã€ãã©ãª/ tomkets / javaã«åãæ¿ããåŸãç§ãé·ãéå®è¡ããŠããã¢ããªã±ãŒã·ã§ã³ã¯ãæçš¿ãããŠãã2é±éåŸã«çªç¶éåžžã«ã²ã©ãåäœãå§ããŸããã
2ïŒåœŒãã¯ç§ã«ãªãã¡ã¯ã¿ãªã³ã°ãããžã§ã¯ããæäŸããŸããããããããã°ããã®éã¯ããŸãåäœããŸããã§ããã
ãããã®ã€ãã³ããçºçããæ£ç¢ºãªé åºã¯ããèŠããŠããŸããããããã©ãã¯ãã©ã€ããŒãã®åŸããã©ãã¯ããã¯ã¹ã«ãªããªãããã«ãæçµçã«ã¡ã¢ãªãã³ãããã詳现ã«åŠçããããšã«ããŸããã ç§ã¯ãã§ã«ããã€ãã®è©³çŽ°ãå¿ããããšãã§ããããšãèŠåããŸãã
æåã®ã±ãŒã¹ã§ã¯ãçç¶ã¯æ¬¡ã®ãšããã§ããïŒãªã¯ãšã¹ãã®åŠçã«é¢äžãããã¹ãŠã®ãããŒãä¿åãããããŒã¿ããŒã¹ãžã®æ¥ç¶ã¯11ã®ã¿ã§ããã䜿çšãããŠãããšã¯èšãããããŒã¿ããŒã¹ã¯recvã¹ãªãŒãç¶æ ã«ãããã€ãŸãããããåŸ æ©ããŠãããšèšããŸãã䜿çšãéå§ããŸãã
åèµ·ååŸãã¢ããªã±ãŒã·ã§ã³ã¯åŸ©æŽ»ããŸããããé·ãçããããšã¯ã§ããŸããã§ãããåãéææ¥ã®å€æ¹ã«æãé·ãçããŸãããã皌åæ¥ã®çµäºåŸã«åã³èœã¡ãŸããã ç»åã¯åžžã«åãã§ãããããŒã¿ããŒã¹ãžã®11ã®æ¥ç¶ãšã1ã€ã ããäœããããŠããããã§ãã
ã¡ãªã¿ã«ãã¡ã¢ãªã¯æå°éã§ããã OOMãçç±ã®æ€çŽ¢ã«ç§ãå°ãããšã¯èšããŸããããçç±ã®æ€çŽ¢ã§åŸãããç¥èã«ãããOOMãšã®ç©æ¥µçãªæŠããå§ããããšãã§ããŸããã
JVVMã§ãã³ããéãããšããããããäœããç解ããããšã¯å°é£ã§ããã


æœåšæèã¯ããã®çç±ã¯åºå°ã§ã®äœæ¥ã®ã©ããã«ãããšç€ºåããŸããã
ã¯ã©ã¹ãæ€çŽ¢ãããšãã¡ã¢ãªã«ã¯ãã§ã«29åã®DataSourceããããŸããã7åããååšããªãã¯ãã§ãã

ããã¯ãç§ã人ãæŒãã®ãããã€ãã解ãå§ããããšãã§ãããã€ã³ããäžããŠãããŸããã
Oql
ãã¥ãŒã¢ãŒã§ãã¥ãŒã¢ãŒã«åº§ãæéã¯ãããŸããã§ããããã€ãã«OQLã³ã³ãœãŒã«ã¿ãã«æ³šæãåããããŸããããããçå®ã®ç¬éã ãšæããŸããããããæ倧éã«äœ¿ãå§ããããããããã¹ãŠå¿ããŸãã

ãã¡ãããå§ããåã«Googleã«è³ªåãããã圌ã¯JVVMã§OQLã䜿çšããããã®èã®å·»ã芪åã«æäŸããŠãããŸããïŒ http ://visualvm.java.net/oqlhelp.html
æåã¯ã倧éã®å§çž®ãããæ å ±ã«ãã£ããããŸããããGoogleã䜿çšããåŸã次ã®OQLã¯ãšãªã衚瀺ãããŸããã
select {instance: x, uri: x.url.toString(), connPool: x.connectionPool} from org.apache.tomcat.dbcp.dbcp2.BasicDataSource x where x.url != null && x.url.toString() == "jdbc:sybase:Tds::/"
ããã¯ãã§ã«ä¿®æ£ãããè£è¶³ãããŠããŸãããã®ãªã¯ãšã¹ãã®æçµããŒãžã§ã³ã§ã:)
çµæã¯ã¹ã¯ãªãŒã³ã·ã§ããã§èŠãããšãã§ããŸãïŒ

BasicDataSourceïŒ7ãã¯ãªãã¯ããåŸã[ã€ã³ã¹ã¿ã³ã¹]ã¿ãã§ç®çã®ãªããžã§ã¯ãã«ç§»åããŸãã

ãã°ããããŠã/ conf / context.xmlãã¡ã€ã«ã®tomketã®Resourceã¿ã°ã§æå®ãããæ§æã«ççŸãããããšãããããŸããã å®éããã³ãã§ã¯ãmaxTotalãã©ã¡ãŒã¿ãŒã®å€ã¯8ã§ãããmaxActiveã20ã«èšå®ããŠããŸã...

ãã®2é±éãã¢ããªã±ãŒã·ã§ã³ãééã£ãæ¥ç¶ããŒã«æ§æã§çããŠããããšããç§ã«äŒããå§ããŸããïŒ
ç°¡æœã«ããããã«ãTomcatã䜿çšããDBCPãæ¥ç¶ããŒã«ãšããŠäœ¿çšããå ŽåãDBCPããŒãžã§ã³1.4ã¯7çªç®ã®ããªã¥ãŒã ã§äœ¿çšãããDBCP 2.0ã¯8çªç®ã®ããªã¥ãŒã ã§äœ¿çšãããŸãããªãã·ã§ã³ïŒ ãããŠãäžè¬çãªmaxTotalã«ã€ããŠã¯ããµã€ãã®ã¡ã€ã³ããŒãžã«æžãããŠããŸã:)
http://commons.apache.org/proper/commons-dbcp/
ããŠãŒã¶ãŒã¯ãCommons Pool 2ã§äœ¿çšãããæ°ããååã«åãããããã«ãäžéšã®æ§æãªãã·ã§ã³ïŒmaxActiveããmaxTotalãªã©ïŒã®ååãå€æŽãããŠããããšã«ã泚æããå¿ èŠããããŸããã
çç±
圌ã¯ãšã«ããããããåŒã³åºããèœã¡çããŠããããç解ããããšã«ããŸããã
å€æããããã«ãBasicDataSourceFactoryã¯ã©ã¹ã¯åçŽã«ãã®ãªãœãŒã¹ãåãåããå¿ èŠãªãã©ã¡ãŒã¿ãŒããããã©ããã確èªããŠãçæãããBasicDataSourceãªããžã§ã¯ãã«ããããããã¯ã¢ããããèå³ã®ãªããã®ããã¹ãŠå®å šã«ç¡èŠããŸãã
ããããªãã©ã¡ãŒã¿ãŒmaxActive => maxTotalãmaxWait => maxWaitMillisãremoveAbandoned => removeAbandonedOnBorrowïŒremoveAbandonedOnMaintenanceã®ååãå€æŽãããŸããã
ããã©ã«ãã§ã¯ãåè¿°ã®ããã«maxTotalã¯8ã§ãã removeAbandonedOnBorrowãremoveAbandonedOnMaintenance = falseãmaxWaitMillisã¯æ°žä¹ ã«åŸ æ©ããããã«èšå®ãããŠããŸãã
ããŒã«ã¯ãæå°æ°ã®æ¥ç¶ã§æ§æãããŠããããšãå€æããŸããã 空ãæ¥ç¶ãçµäºãããšãã¢ããªã±ãŒã·ã§ã³ã¯æ¥ç¶ã解æŸãããã®ãéãã«åŸ ã¡ãŸãã ãããŠãæ²é»ã¯ãæŸæ£ããããæ¥ç¶ã«é¢ãããã°ã®ãã¹ãŠãçµäºããŸã-
ããã¯çŸåšãã¢ã¶ã€ã¯å šäœãæ¥éã«éçºããããã®ã§ããããã®ç¥èã¯ããé·ãæœåºãããŠããŸãã
ããã®ãããªãã®ã§ãã£ãŠã¯ãªããªãããšç§ã¯æ±ºå®ãããããïŒ https://issues.apache.org/jira/browse/DBCP-435ãã¬ãã·ã³ã°ã ã httpïŒ //svn.apache.org/viewvc/commons/proper/ã«çœ®ããŸããdbcp / tags / DBCP_2_1 / src / main / java / org / apache / commons / dbcp2 / BasicDataSourceFactory.javaïŒview = markup ïŒãããããåãå ¥ããããDBCPããŒãžã§ã³2.1ã«å ¥åãããŸããã Tomcat 8ãDBCPããŒãžã§ã³ã2.1+ã«ã¢ããã°ã¬ãŒãããå Žåãå€ãã®ç§å¯ããªãœãŒã¹æ§æã«ã€ããŠç®¡çè ã«æããã«ããããšæããŸã:)
ãã®äºä»¶ã«é¢ããŠããã1ã€è©³çŽ°ã説æããå¿ èŠããããŸããããã³ãå ã®å°çã¯æ¢ã«7åã§ã¯ãªã29 DataSource'ovã§ããã çãã¯ã7 * 4 = 28 + 1 = 29ã®å¹³å¡ãªç®è¡ã«ãããŸãã
ãªãœãŒã¹ãtomketã®/conf/context.xmlãã¡ã€ã«ã«ããããã§ããªãçç±ã®è©³çŽ°
/ webappsãã©ã«ããŒå
ã®åãµããã©ã«ããŒã«å¯ŸããŠãç¬èªã®ã³ããŒ/conf/context.xmlãçæãããŸããã€ãŸããååšãããªãœãŒã¹ã®æ°ã«ã¢ããªã±ãŒã·ã§ã³ã®æ°ãæããŠããœã±ããã®ã¡ã¢ãªãŒã§çæãããããŒã«ã®ç·æ°ãååŸããå¿
èŠããããŸãã ããã®å Žåã¯ã©ãããã°ããã§ããããšãã質åã«å¯Ÿããçãã¯æ¬¡ã®ãšããã§ãããã¹ãŠã®ãªãœãŒã¹å®£èšã/conf/context.xmlããGlobalNamingResourcesã¿ã°å
ã®/conf/server.xmlãã¡ã€ã«ã«ç§»åããå¿
èŠããããŸãã ããã§ãããã©ã«ãã§Resource name = "UserDatabase"ã®1ã€ãèŠã€ããŠããã®äžã«ããŒã«ãé
眮ã§ããŸãã 次ã«ãResourceLinkã¿ã°ã䜿çšããå¿
èŠããããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããžã§ã¯ãå
ã®/META-INF/context.xmlãã¡ã€ã«å
ã«é
眮ããããšãæãŸããã§ããããã¯ããããããã¢ããªããšã®ã³ã³ããã¹ãããã€ãŸãã次ã®ç®çã§ã®ã¿äœ¿çšã§ããã³ã³ããŒãã³ãã®å®£èšãå«ãã³ã³ããã¹ãã§ããããã€å¯èœãªã¢ããªã±ãŒã·ã§ã³ã ResourceLinkã®å Žåãååãšã°ããŒãã«ãã©ã¡ãŒã¿ãŒã«åãå€ãå«ããããšãã§ããŸãã
äŸïŒ
ãã®ãªã³ã¯ã¯ããjdbc / MyDBããšããååã®ã°ããŒãã«ã«å®£èšãããããŒã¿ãœãŒã¹ããååŸãããªãœãŒã¹ã¯ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšå¯èœã«ãªããŸãã
ResourceLinkã¯ïŒå¿ é ã§ã¯ãããŸãããïŒ/conf/context.xmlã«é 眮ã§ããŸããããã®å Žåãã¡ã¢ãªå ã«DataSourceã®ã³ããŒãããã»ã©å€ããªãå Žåã§ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ã°ããŒãã«ã«å®£èšããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
詳现ã«ã€ããŠã¯ãGlobalNamingResources- http ://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Environment_EntriesãResourceLink-http://tomcat.apache.org/tomcat-7.0-docãã芧ãã ããã /config/globalresources.html#Resource_Links ããã®ããŒãžã衚瀺ããããšãã§ããŸãïŒ tomcat.apache.org/tomcat-7.0-doc/config/context.html
TC8ã®å ŽåãåãããŒãžïŒ http ://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.htmlããã³http://tomcat.apache.org/tomcat-8.0-doc/config/context.html
äŸïŒ
<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" type="javax.sql.DataSource"/>
ãã®ãªã³ã¯ã¯ããjdbc / MyDBããšããååã®ã°ããŒãã«ã«å®£èšãããããŒã¿ãœãŒã¹ããååŸãããªãœãŒã¹ã¯ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšå¯èœã«ãªããŸãã
ResourceLinkã¯ïŒå¿ é ã§ã¯ãããŸãããïŒ/conf/context.xmlã«é 眮ã§ããŸããããã®å Žåãã¡ã¢ãªå ã«DataSourceã®ã³ããŒãããã»ã©å€ããªãå Žåã§ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ã°ããŒãã«ã«å®£èšããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
詳现ã«ã€ããŠã¯ãGlobalNamingResources- http ://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Environment_EntriesãResourceLink-http://tomcat.apache.org/tomcat-7.0-docãã芧ãã ããã /config/globalresources.html#Resource_Links ããã®ããŒãžã衚瀺ããããšãã§ããŸãïŒ tomcat.apache.org/tomcat-7.0-doc/config/context.html
TC8ã®å ŽåãåãããŒãžïŒ http ://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.htmlããã³http://tomcat.apache.org/tomcat-8.0-doc/config/context.html
ãã®åŸããã¹ãŠãæããã«ãªããŸããã11ã®æ¥ç¶ã¯ã1ã€ã®ã¢ã¯ãã£ããªDataSourceã§8ã€ã®æ¥ç¶ïŒmaxTotal = 8ïŒã䜿çšããã3ã€ã®æªäœ¿çšã®DataSourceã³ããŒã§å¥ã®minIdle = 1ã䜿çšãããããã§ãã
ãã®éææ¥ãç§ãã¡ã¯Tomcat 7ã«ããŒã«ããã¯ããŸãããTomcat7ã¯ãã®æšªã«ãããåŠåãããã®ãåŸ ã£ãŠããŸããã
ããã«ãTC7ã§æ¢ã«removeAbandonedãšlogAbandonedã®ãããã§æ¥ç¶ãªãŒã¯ãçºèŠãããŸããã DBCPã¯åãã§catalina.logãã°ãã¡ã€ã«ã«å ±åããŸããã
"org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2015-02-10 09:34:20 by the following code was never closed: at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:139) at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:81) at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) at ...getConnection(.java:100500) at ...(.java:100800) at ...2(.java:100700) at ...1(.java:100600) ..."
ãã®æªãã¡ãœããã§ããBad Methodã«ã¯ã眲åã«æ¥ç¶conããããŸãããå éšã«ãcon = getConnectionïŒïŒ;ãã³ã³ã¹ãã©ã¯ãããããã€ãŸããã®ãããã¯ã«ãªããŸããã SuperClassãåŒã³åºãããããšã¯ãã£ãã«ãªãã®ã§ã圌ãã¯ããã»ã©é·ãé泚æãæããŸããã§ããã ããã«ãç§ãç解ããŠããããã«ãå¶æ¥æ¥äžã¯é»è©±ãããã£ãŠããªãã£ãã®ã§ãäœããã¶ãäžãã£ãŠããŠãä»ã®äººã¯æ°ã«ããŸããã§ããã ããµã ãŠããããã¡ã§ã¯æã ããåæãã顧客éšéã®é·ã¯äœããèŠãå¿ èŠããããŸãã:)
ä»é²2
ãã€ãã³ãçªå·2ãã«ã€ããŠã¯ããªãã¡ã¯ã¿ãªã³ã°çšã®ã¢ããªã±ãŒã·ã§ã³ãæäŸããŠãããããã«ãµãŒããŒã§ã¯ã©ãã·ã¥ããããšã«ãªããŸããã
ãã³ãã¯ãã§ã«ç§ã«å±ããŠãããç§ãããããéžæããããšããããšã«ããŸããã
JVVMã§ãã³ããéãããå°ãå æ°ã¥ããŸãããïŒ

Object []ããäœãç解ã§ããŸããïŒ
ïŒãã¡ãããçµéšã®ãã人ã¯ãã§ã«ãã®çç±ãèŠãŸããããïŒïŒ
ã ãããããŸããæ¬åœã«ã誰ãããããã£ãããšããªãã確ãã«æ¢è£œã®ããŒã«ãããããã ïŒã ã ããç§ã¯StackOverflowã§ãã®è³ªåã«åºããããŸããïŒ http ://stackoverflow.com/questions/2064427/recommendations-for-a-heap-analysis-tool-for-java
ææ¡ããããªãã·ã§ã³ã確èªããåŸãç§ã¯MATã«ç«ã¡å¯ãããšã«æ±ºããŸãããå°ãªããšãäœããè©Šããªããã°ãªããŸããã§ãããããã¯ãªãŒãã³ãããžã§ã¯ãã§ãããä»ã®ã¢ã€ãã ãããå€ãã®ç¥šããããŸãã
Eclipseã¡ã¢ãªåæããŒã«
ã ããããããã
Eclipseã®ææ°ããŒãžã§ã³ãããŠã³ããŒãããŠãMATãã€ã³ã¹ããŒã«ããããšããå§ãããŸããMATã®ç¬ç«ããããŒãžã§ã³ã®åäœãæªãããã€ã¢ãã°ã衚瀺ããããã£ãŒã«ãã«å 容ã衚瀺ãããªãããã§ãã ãã¶ã誰ããã³ã¡ã³ãã§åœŒã«æ¬ ããŠããããšãæããŠããããããããŸããããEclipseã«MATãã€ã³ã¹ããŒã«ããããšã§åé¡ã解決ããŸããã
MATã§ãã³ããéããåŸããªãŒã¯ãµã¹ãã¯ãã¬ããŒãããªã¯ãšã¹ãããŸããã


æ£çŽèšã£ãŠããµãã©ã€ãºã«ã¯éçããããŸããã§ããã

1.2ã®ã¬ãã€ãã¯ãããŒã¹ãžã®æ¥ç¶ã®ééãéããŸãã

åæ¥ç¶ã®ééã¯17ã81ã¡ã¬ãã€ãã§ãã

ããŠãããŒã«èªäœã¯ããå°ãã§ãã
ããããŒã¿ãŒããªãŒã¬ããŒãã¯ãåé¡ãèŠèŠåããã®ã«åœ¹ç«ã¡ãŸããã

SQLWarningã®ããã¡ãŒãã«ããã¹ãŠã®ãã©ãŒã«ã®åå ã§ããããšãå€æãããããããŒã¿ããŒã¹ã¯ã010SKïŒããŒã¿ããŒã¹ã¯æ¥ç¶ãªãã·ã§ã³SET_READONLY_TRUEãèšå®ã§ããŸããããšæç¶çã«æ確ã«ããããšããŸãããæ§æã§ããŸããïŒç¥ã£ãŠããå Žåã¯æããŠãã ããïŒã
Googleã¯ãSybase ASEã®ãã®ãããªåé¡ã¯2004幎以æ¥ç¥ãããŠãããšèšããŸããïŒ https : //forum.hibernate.org/viewtopic.php?f=1&t=932731
èŠããã«ããSybase ASEã¯æé©åãå¿ èŠãšããªããããsetReadOnlyïŒïŒã¯SQLWarningãçæããŸããããããŠããããã®ãœãªã¥ãŒã·ã§ã³ã¯åŒãç¶ãæ©èœããŸãã
ãã ããããã¯åé¡ã®è§£æ±ºçã§ã¯ãããŸãããåé¡ã®è§£æ±ºçã¯ãæ¥ç¶ãããŒã«ã«æ»ããããšãã«ã誰ããããå¿ èŠãšããªããšããäºå®ã«ããããã¹ãŠã®ããŒã¿ããŒã¹éç¥ãã¯ãªã¢ãããããã§ãã
DBCPã¯ãããè¡ãããšãã§ããŸãïŒ http ://svn.apache.org/viewvc/commons/proper/dbcp/tags/DBCP_1_4/src/java/org/apache/commons/dbcp/PoolableConnectionFactory.java?view=markupãmethod passivateObjectïŒObject objïŒã687è¡ç®ã§conn.clearWarningsïŒïŒ;ãèŠãããšãã§ããŸãããã®åŒã³åºãã¯SQLWarningãã¡ã¢ãªå ã®ããã¡ãŒãã«ããä¿åããŸãã
ããã«ã€ããŠã¯ããã±ããããåŠã³ãŸããïŒ https ïŒ //issues.apache.org/jira/browse/DBCP-102
ãŸãããã°ãã©ãã«ãŒã§ãã®ãããªãã±ããã«ã€ããŠã®ããã³ããã衚瀺ãããŸããïŒ https ://issues.apache.org/jira/browse/DBCP-234ãããã¯ãã§ã«DBCP 2.0ã«é©çšãããŸãã
ãã®çµæãã¢ããªã±ãŒã·ã§ã³ãDBCPã«è»¢éããŸããïŒããŒãžã§ã³1.4ã§ããïŒã ãµãŒãã¹ã®è² è·ã¯ããªã倧ããïŒ1åããã800ãã2kãªã¯ãšã¹ãïŒããããã§ãã¢ããªã±ãŒã·ã§ã³ã¯é©åã«åäœãããããäž»ãªããšã§ãã BoneCPã¯5ãæéãµããŒããããŠããªãã£ãããã圌ã¯ãããæ£ããè¡ããŸããããHikariCPã¯åœŒã«åã£ãŠä»£ãããŸããã ããªãã¯ç©äºããã®ãœãŒã¹ã«ã©ã®ããã«ããããèŠãå¿ èŠããããŸã...
ãã¡ã€ãã£ã³ã°OOM
MATãæ£ã«ãã¹ãŠãé 眮ããæ¹æ³ã«æéãåããç§ã¯ãã®åŒ·åãªããŒã«ãæšãŠãªãããšã«æ±ºããŸãããæåã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããã¹ãã¢ãŒãããã·ãŒãžã£ã³ãŒãã®åå ãšãªããã¹ãŠã®çš®é¡ãåå ã§ããã¢ããªã±ãŒã·ã§ã³ããã£ã³ãæ¥çãããšããäºå®ã«ã ç§ã¯ãŸã ãããããã£ããããŸãã
äž¡æ¹ã®ããŒã«ã䜿çšããŠãOOMãèœã¡ãçç±ãæ¢ããŠãéä¿¡ãããåãã³ããéžæãå§ããŸããã
ååãšããŠããã¹ãŠã®OOMãTaskThreadã«ã€ãªãããŸããã

ãããŠãã¹ã¿ãã¯ã¹ã¿ãã¯ãåç §ããŠãã ããç¢æãã¯ãªãã¯ãããšãã¯ãããã®çµæã®ããŒã·ã£ãªã³ã°äžã«ã¹ã¬ãããçªç¶èœã¡ããšãã®åãªãå¹³å¡ãªã±ãŒã¹ã«ãªããŸãã

ãã ããããã§ã¯OOMã®åå ã瀺ããã®ã¯äœããããŸãã;ããã¯çµæã«ãããŸããã ãããŸã§ã®ãšãããMATã®OQLã®ãã¹ãŠã®éæ³ã®ç¥èãäžè¶³ããŠããããã«ãç§ã«ãšã£ãŠã®çç±ãèŠã€ããããã«åœ¹ç«ã€ã®ã¯JVVMã§ãã
ããã§ãã³ããããŒãããçç±ãèŠã€ããããšããŸãïŒ

ãã¡ãããããŒã¿ããŒã¹ã«é¢é£ãããã®ãæ£ç¢ºã«æ¢ãå¿ èŠãããããããŸããã¡ã¢ãªå ã«ã¹ããŒãã¡ã³ãããããã©ããã確èªããŠã¿ãŸãããã

2ã€ã®SybCallableStatementãš1ã€ã®SybPreparedStatementã
Statement'ovãã¯ããã«å€§ãããªããšãåé¡ã¯ããè€éã«ãªããšæããŸããã次ã®ã¯ãšãªã®ãããããå°ã調æŽããŠãå¿ èŠãªæ¡ä»¶ã瀺ãããã¹ãŠãããŸããããšæããŸãã ããã«ããã¡ãããMATãããèŠã䟡å€ããããã¹ããªãŒã ãããŒã·ã£ãªã³ã°ããããšããŠããçµæã®çš®é¡ããªããžã§ã¯ããããã³ã¹ããŒãã¡ã³ãã®ããããæ€çŽ¢ããå¿ èŠãããããæ確ã«ãªããŸãã
select { instance: x, stmtQuery: x._query.toString(), params: map(x._paramMgr._params, function(obj1) { if (obj1 != null) { if (obj1._parameterAsAString != null) { return '\''+obj1._parameterAsAString.toString()+'\''; } else { return "null"; } } else { return "null"; } }) } from com.sybase.jdbc4.jdbc.SybCallableStatement x where x._query != null

ãããããå éšãã®èª²é¡ã§ããããšã§ã¯ãããŸããã
select { instance: x, stmtQuery: x._query.toString(), params: map(x._paramMgr._params, function(obj1) { if (obj1 != null) { if (obj1._parameterAsAString != null) { return '\''+obj1._parameterAsAString.toString()+'\''; } else { return "null"; } } else { return "null"; } }) } from com.sybase.jdbc4.jdbc.SybPreparedStatement x where x._query != null

ãããŠãããã«ã²ãŒã ããããŸãïŒ
å®éšã®çŽåºŠã®ããã«ããæ°ã«å ¥ãã®DB-IDEã§åãã¯ãšãªãæããããšãã§ããéåžžã«é·ãéããŸããããŸããã¹ãã¬ãŒãžã®è žãæãäžãããšããã®ã¯ãšãªã«ãã£ãŠ200äžè¡ãéžæãããŠããããšãæããã«ãªããŸãããã®ãããªãã©ã¡ãŒã¿ã§ã ãããã®200äžåãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªã«å ¥ããŸãããçµæãããŒã·ã£ãªã³ã°ããããšãããšãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠèŽåœçã«ãªããŸãã ããã¯ãã©ããªã§ãã :)
åæã«ãGCã¯ãã¹ãŠã®èšŒæ ãæ éã«åé€ããŸãããããã¯åœŒãæããŸããã§ãããããœãŒã¹ã¯åœŒã®èšæ¶ã«æ®ãã圌ã¯åŠçœ°ãããŸãã
ãªãããã®çç±ã§ããã®ãã¹ãŠã®è©±ã®åŸãç§ã¯ãŸã 倱æããããã«æããŸããã
ããããªã
ããã§ç§ã®è©±ã¯çµãããŸããã楜ããã§ããã ããã°å¹žãã§ã:)
ç§ã¯äžåžã«æè¬ãããã圌ã¯ç§ã«ãããç解ããæéãäžããã ãã®æ°ããç¥èã¯éåžžã«åœ¹ç«ã€ãšæããŸãã
ãã€ãçŸå³ããã³ãŒããŒããããã¹ã³ãªãŒãã®å¥³ã®åãã¡ã«æè¬ããŸããããããã®æè¬ã®èšèãèªãŸãªãã§ããã-ããã©ããã«ã®ååšãç¥ã£ãŠãããšã¯æããŸãã:)
ã³ã¡ã³ãã«ããã«æçšãªæ å ±ãšè¿œå ã衚瀺ããããšæããŸããéåžžã«æè¬ããŸãã
MATã®ããã¥ã¡ã³ããèªãæéã ãšæããŸã...
UPD1 ïŒã¯ããã¡ã¢ãªãã³ãã®äœæãªã©ã®æçšãªããšã«ã€ããŠè©±ãã®ãå®å šã«å¿ããŠããŸããã
docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html#gbzrr
ãªãã·ã§ã³
-XXïŒ+ HeapDumpOnOutOfMemoryError
-XXïŒHeapDumpPath = / disk2 /ãã³ã
ã¢ããªã±ãŒã·ã§ã³ãOutOfMemoryErrorã§ã¯ã©ãã·ã¥ãããšãã«ãã³ããçæããã®ã«éåžžã«äŸ¿å©ã§ãã
ãŸããæäœã®éäžã§ãå©çãã¢ããªã±ãŒã·ã§ã³ããã¡ã¢ãªãã³ããåé€ããæ©äŒããããŸãã
ããã«ã¯jmapãŠãŒãã£ãªãã£ããããŸãã
Windowsã®åŒã³åºãäŸïŒ
ãCïŒ\ install \ PSTools \ PsExec.exeã-sãCïŒ\ Program Files \ Java \ jdk1.7.0_55 \ bin \ jmap.exeã-dumpïŒliveãformat = bãfile = CïŒ\ dumpã hprof 3440
æåŸã®ãã©ã¡ãŒã¿ãŒã¯ãJavaããã»ã¹ã®PIDã§ãã PSToolsã¹ã€ãŒãã®PsExecã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã«-sã¹ã€ããã䜿çšããŠãã·ã¹ãã æš©éã§ä»ã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã liveãªãã·ã§ã³ã¯ããã³ããä¿åããåã«GCãåŒã³åºããŠããŽãã®ã¡ã¢ãªãã¯ãªã¢ããã®ã«äŸ¿å©ã§ãã OOMãçºçããå Žåãã¡ã¢ãªãã¯ãªã¢ããå¿ èŠã¯ãªããã¬ããŒãžã¯æ®ã£ãŠããŸããããã®ãããOOMã®å Žåã«ã©ã€ããªãã·ã§ã³ãèšå®ããæ¹æ³ãæ¢ããªãã§ãã ããã
UPD2ïŒ2015-10-28ïŒ| ã±ãŒã¹çªå·2ã3
ïŒåãããšã«ã€ããŠã®æ°ããèšäºãèŠãã®ã§ã¯ãªãããããã¢ããããŒããšããŠããã«è¿œå ããããšã«ããŸããïŒïŒ
å¥ã®èå³æ·±ãã±ãŒã¹ã§ãããOracleããŒã¹ã䜿çšããŠããŸãã
ãããžã§ã¯ãã®1ã€ã¯ãXMLã®æ©èœã䜿çšããŠãä¿åãããXMLããã¥ã¡ã³ãã®ã³ã³ãã³ããæ€çŽ¢ããŸãã äžè¬çã«ããã®ãããžã§ã¯ãã¯ãã€ã³ã¹ã¿ã³ã¹ã®1ã€ãçªç¶ãçåœã®å åã瀺ãã®ãããããšããäºå®ã«èªåèªèº«ãæããããšããããŸããã

ç§ãæåã«ç®ã«ããã®ã¯ããèšæ¶ã«ããããã®æ¥ç¶ãæ®ã£ãŠãããããšã§ããã 21k !!!ãŸããèå³æ·±ãoracle.xdb.XMLTypeãç±ãäžããŸããã ãããããããã¯ãªã©ã¯ã«ã§ãïŒããç§ã®é ã®äžã§åã£ããå ãèŠãŠãã¯ãã圌ã¯è²¬ä»»ããããšèšããŸãã

ãã®ãããHashMap $ Entryã«ããT4CConnectionã®æã確èªããŸããç§ã¯ããã«ãããSoftHashMapã®ããã«èŠããããšã«æ°ä»ããŸãããããã¯ããã®ãããªãµã€ãºã«æé·ããŠã¯ãªããªãããšãæå³ããã¯ãã§ããããããçµæã¯èªåã§ç¢ºèªã§ããŸã-æ¥ç¶ããšã«50ã60ãããã€ãã§ãå®éã«ã¯ãããããããŸãã

HashMap $ Entryãšã¯äœããèŠãŠã¿ããšãåçã¯ã»ãŒåãã§ããã¹ãŠãSoftHashMapãšOracleæ¥ç¶ã§æ¥ç¶ãããŠããããšãããããŸããã

å®éãããã¯ãã®ãããªåçã«ãã£ãŠç¢ºèªãããŸããã HashMap $ Entryã¯åãªãæµ·ã§ããããããã¯å€ããå°ãªããoracle.xdb.SoftHashMapå ã«èç©ãããŠããŸããã
次ã®ãã³ãã§ã¯ãåçã¯ã»ãŒåãã§ãããããããŒã¿ãŒããªãŒã«ãããšãåãšã³ããªå ã«ãã®ãããªéãBinXmlProcessorImplãããããšãæããã§ããã




-=-=-
ãã®ç¬éãç§ã¯xdbãäœã§ãããXMLãšã©ã®ããã«é¢é£ããŠãããã«åŒ·ããªãã£ãã®ã§ãããæ··ä¹±ããŠãã°ãŒã°ã«ããã¹ãã ãšæ±ºããŸãããããããã¹ãŠãã©ãããããç¥ã£ãŠããŸãããããŠæ¬èœãã ãŸãããŠããªããèŠæ±ã«å¿ããŠÂ«oracle.xdb.SoftHashMap T4CConnection»ãèŠã€ãããŸããã
æépiotr.bzdyl.net/2014/07/memory-leak-in-oracle-softhashmap.html
ãš2 leakfromjavaheap.blogspot.com/2014/02/ãmemory-leak-detection-in-real-life.html
Oracleã«ã¯ãŸã 劚害ãæ®ã£ãŠããããšã確èªããããåé¡ã¯å°ãããŸãŸã§ããã
æ€åºãããåé¡ã«é¢ããæ å ±ã確èªããããDBAã«äŸé ŒããŸããã
xxx: : SoftHashMap XMLType
yyy: Bug 17537657 Memory leak from XDB in oracle.xdb.SoftHashMap
yyy: The fix for 17537657 is first included in
12.2 (Future Release)
12.1.0.2 (Server Patch Set)
12.1.0.1.4 Database Patch Set Update
12.1.0.1 Patch 11 on Windows Platforms
yyy: . 説æ
説æ
When calling either getDocument() using the thin driver, or getBinXMLStream()
using any driver, memory leaks occur in the oracle.xdb.SoftHashMap class.
BinXMLProcessorImpl classes accumulate in this SoftHashMap, but are never
removed.
xxx: :)
ä¿®æ£ã®èª¬æã¯æ¬¡ã®ãšããã§ããupdates.oracle.com / Orion / Services / downloadïŒtype = readmeïŒaru = 18629243ïŒã¢ã¯ã»ã¹ã«ã¯Oracleã®ã¢ã«ãŠã³ããå¿ èŠã§ãïŒã
-=-=-
ä¿®æ£ããã°ã©ã ã®é©çšåŸãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ã¿ã³ã¹ã¯1ãæéããããŸã§ã¯éå°ã«äœ¿çšãããŠããŸããã*æšæãã¿ãã* *å·Šè©ã«ã¹ããã*
æ€çŽ¢ã§é 匵ã£ãŠãã ããïŒ