HikariCP ã®ãã㪠connection pool ãå©ç¨ããä¸ã§ç¯ããã¡ãªãã¹ã¨ãã¦ï¼connection leak (pool ãã connection ã borrow ãã£ã±ãªãã§ pool ã«è¿å´ããªããã¨) ãããã¨æãã¾ãï¼connection leak ãæ¾ã£ã¦ãã㨠pool å ã® connection ãæ¯æ¸ãã¦ã«ã£ã¡ããã£ã¡ããããªããªãããååªå ã§ä¿®æ£ããªããã°ãªãã¾ããï¼
connection leak ãä¿®æ£ããã«ã¯ï¼ã¾ã connection leak ã®çºçãæ¤åºããå¿
è¦ãããã¾ãï¼
以åç´¹ä»ãããããªï¼JMX を使って connection の状態をモニタリングする方法 ãããã¾ããï¼ãã®æ¹æ³ã§ã¯ leak ãçºçããç¬éãæ¤åºãããã¨ãåºæ¥ã¾ãããï¼ã©ãã§çºçãããããããã¾ãããããããã°ãé£ãããªãã¾ãï¼
ããã§ã©ããããã¨ããã¨ï¼HikariCP ã使ã£ã¦ããå ´å㯠leakDetectionThreshold
ãè¨å®ããã°ã°ãã¨ãããã°ã便å©ã«ãªãã¾ãï¼
setLeakDetectionThreshold()
ãç¨ãã¦ãããå¤ãè¨å®ããã¨ï¼ãconnection ã borrow ããã¦ãã pool ã«è¿å´ãããã¾ã§ã®æéãããã®ãããå¤ãè¶
ããå ´åã«ï¼HikariCP 㯠error log ã¨ãã¦ã¹ã¿ãã¯ãã¬ã¼ã¹ãåºåãã¾ã *1ï¼ããã«ãã£ã¦ãã¤ï¼ã©ãã§ connection leak ãçºçããã®ããæ¤åºãããã¨ãå¯è½ã«ãªãã¾ãï¼
ã³ã¼ãçã«ã¯ãããªæãï¼
final HikariDataSource dataSource = new HikariDataSource(); ... dataSource.setLeakDetectionThreshold(5000);
ãããã¦ããã¨ï¼borrow ããã connection ãsetLeakDetectionThreshold()
ã§è¨å®ãã 5000ms (5sec) ãè¶
ãã¦ã pool ã«è¿å´ãããªãæã«ã¹ã¿ãã¯ãã¬ã¼ã¹ãåºåãããããã«ãªãã¾ãï¼ä¾¿å©ï¼ãããã§ connection leak ãç´ãããæ¾é¡ã§ããï¼
ã¡ãªã¿ã«å®ç°å¢ã§ã¯ï¼
final HikariDataSource dataSource = new HikariDataSource(); ... if (env.isDevelopment()) { dataSource.setLeakDetectionThreshold(5000); }
ã¨ãã風ã«ãã¦ãã¦ï¼éçºç°å¢ä¸ã§ã®ã¿æ¤åºãæå¹ã«ãã¦ãã¾ãï¼Java ã§ç´ æ´ã«ã¹ã¿ãã¯ãã¬ã¼ã¹ãåãã®ã¯å²ã¨ã³ã¹ããé«ãã¨ããã®ã¨ï¼leak ãæ½°ãã®ã¯éçºä¸ã«ããããåºæ¥ãã ããï¼å ã㦠JMX ã§ connection ã®ç¶æ ãã¢ãã¿ãªã³ã°ãã¦ããã®ã§å®éã®éç¨ã§ã¯ããã§ååã ããã¨ãã夿ããã§ãï¼
connection leak ã¨ããã®ã¯ connection pool ãå©ç¨ããä¸ã§èµ·ããããããã°ã§ããï¼ãã¤ãããã°ãé£ããé¨é¡ã®ãã°ã ã¨æãã¦ãã¾ãï¼
æ¡ç¨ãã connection pool ãé¸å®ããä¸ã§ï¼ ãããã leak ã®æ¤åºããããã°ã容æã«ããæ©è½ãå«ã¾ãã¦ãããã©ããã¯å²ã¨éè¦ãªè¦å ã ã¨æãã¾ãï¼HikariCP ã«ã¯ãããã£ã connection leak ã®ãããã°ãå©ãããªãã·ã§ã³ãåå¨ããã®ã§ä¾¿å©ã§è¯ãã§ããï¼
*1:This property controls the amount of time that a connection can be out of the pool before a message is logged indicating a possible connection leak. A value of 0 means leak detection is disabled. Lowest acceptable value for enabling leak detection is 2000 (2 secs). Default: 0 https://github.com/brettwooldridge/HikariCP