2016-08-01 532 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