2016-08-01 31 views
7

我使用HikariCP 2.4.6和Tomcat的在8啓動時,我得到一個警告消息:登錄警告:檢測出的線程飢餓或時鐘飛躍(管家三角洲= springHikariConnectionPool)

01-Aug-2016 11:18:01.599 INFO [RMI TCP Connection(4)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log Initializing Spring FrameworkServlet 'Spring MVC Dispatcher Servlet' 
[2016-08-01 11:18:01,654] Artifact blueberry:war exploded: Artifact is deployed successfully 
[2016-08-01 11:18:01,655] Artifact blueberry:war exploded: Deploy took 33,985 milliseconds 
Aug 01 2016 11:26:52.802 AM [DEV] (HikariPool.java:614) 
WARN : com.zaxxer.hikari.pool.HikariPool - 9m13s102ms - Thread starvation or clock leap detected (housekeeper delta=springHikariConnectionPool). 

我沒有看到從數據庫讀取/寫入任何其他錯誤或問題。這是值得關注的嗎?我試着四處尋找,但沒有運氣。

我們也使用Hibernate 4.3.8.Final在MySQL 5和MySQL 5.1.39連接器上使用Spring 4.1.0.RELEASE。我們正在努力升級到Hibernate 5,並將看看這是否會消失,但不知道這是否重要。

+0

在Windows 10,JDK 8u121的調試會話期間獲得此許多信息,我自己不確定原因。 – SGM1

+1

我發現它最常見的原因是由於3)在我的回答下面 – bphilipnyc

回答

9

我剛剛注意到有一個稍微更新的HikariCP版本(2.4.7)解決了這個問題出現在我的實例上。

有一個很好的rundown爲什麼跳時檢測可能會合法發生。引用Brett Woolridge的外部鏈接:

它在管家線程上運行,每30秒執行一次。如果你在Mac OS X上,clockSource是 System.currentTimeMillis(),clockSource是 System.nanoTime()的任何其他平臺。理論上都是單調遞增的,但是各種各樣的東西都會影響到NTP服務器等。大多數操作系統是 ,旨在處理反向NTP時間調整,以保留時間正向流動的錯覺。

此代碼是說,如果時間向後移動(現<以前的),或者如果 時間有「撲了上去」兩個以上的看家週期(更多 超過60秒),然後奇怪的事情很可能繼續。

幾件事情可能什麼:

  1. 你可以在一個虛擬容器中運行(VMWare的,AWS等),由於某種原因,正在做維護 的一個特別差的工作時間向前流動的幻覺。

  2. 由於發生在管家線程其他事情 - 具體而言,關閉空閒連接 - 這是可能的,對於一些 原因關閉連接被阻塞管家線程更 比兩種持家週期(60秒)。

  3. 服務器非常繁忙,所有CPU都掛起,導致線程匱乏,這妨礙了管家線程在兩個以上的管理期間運行 。

考慮到這些,也許你可以提供額外的上下文。

編輯:請注意,這是基於HikariCP 2.4.1代碼。確保你的 運行的是最新版本。

(它看起來像在最新的代碼中的警告聲明更新參數。)

+6

原因3也出現在調試你的應用程序時,並且在一個斷點處等待兩個以上的看家期(60秒)。在繼續取得進展之後,Hikari正在抱怨上述問題中的警告。 – GreenTurtle