今天我有一个应用程序,它使用了接近 100% 的 CPU 资源。我做了一些线程转储。发现:
"resin-port-8080-284" daemon prio=10 tid=0x00002ad370261000 nid=0x79c5 runnable [0x00002ad30b32d000]
java.lang.Thread.State: RUNNABLE
at java.util.HashMap.getEntry(HashMap.java:465)
at java.util.HashMap.get(HashMap.java:417)
at org.logicalcobwebs.proxool.proxy.InvokerFacade.getConcreteMethod(InvokerFacade.java:38)
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:111)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
at $java.lang.AutoCloseable$$EnhancerByProxool$$66bad385.getWarnings(<generated>)
at org.hibernate.util.JDBCExceptionReporter.logAndClearWarnings(JDBCExceptionReporter.java:45)
at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:472)
at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:408)
at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:347)
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:335)
HashMap 中的链表应该有一个循环链,所以 CPU 会一直运行并消耗所有资源。
Proxool 版本是 0.9.0RC3,Java 是 1.7。
所以我不知道为什么会这样?大多数情况下,该应用程序都可以。而且从源代码来看,相关的 Proxool 类似乎是线程安全的。
是 Proxool 的错误吗?