今天我有了一个应用程序,它几乎使用了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的虫子吗?
发布于 2017-02-15 13:36:24
InvokerFacade类有一个静态HashMap并在不同步的情况下对其进行变异。
HashMap 文档明确指出:
如果多个线程同时访问散列映射,并且至少有一个线程在结构上修改映射,则必须在外部同步它。
这是一个缺陷,并可能导致各种奇怪的行为,包括你在这里观察。
https://stackoverflow.com/questions/42250797
复制相似问题