服务器上JBOSS上进行压力测试时,经常发现JAVA 的CPU占用99% 用JProfiler查看内存发现很多线程都阻塞在java.util.HashMap.containsKey,具体现象如下:
Thread "CyxHandler 10":
at java.util.HashMap.containsKey(java.lang.Object)
at org.apache.commons.collections.SequencedHashMap.containsKey(java.lang.Object)
at org.apache.commons.collections.LRUMap.put(java.lang.Object, java.lang.Object)
at org.hibernate.util.SoftLimitMRUCache.put(java.lang.Object, java.lang.Object)
at org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(org.hibernate.engine.query.NativeSQLQuerySpecification)
at org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(org.hibernate.engine.query.NativeSQLQuerySpecification)
at org.hibernate.impl.AbstractSessionImpl.list(org.hibernate.engine.query.NativeSQLQuerySpecification, org.hibernate.engine.QueryParameters)
at org.hibernate.impl.SQLQueryImpl.list()
at org.hibernate.impl.AbstractQueryImpl.uniqueResult()
at com.ccic.ydcd.hibernate.util.HibernateDAO.executeBatchSqlCD(java.lang.String, java.lang.String, java.lang.String[ ])
at com.ccic.ydcd.dao.impl.DingShiSendDAOImpl.addDingShiDate(java.util.Map)
at com.ccic.ydcd.service.impl.DingShiSendServiceImpl.addDingShiDate(java.lang.String)
at com.ccic.ydcd.socket.socketpool.cyxserver.CyxTransSocketPoolConnectionHandle.handleConnection()
at com.ccic.ydcd.socket.socketpool.cyxserver.CyxTransSocketPoolConnectionHandle.run()
at java.lang.Thread.run()
经过查看hibernate的SoftLimitMRUCache.java,commons.collection的ReferenceMap.java发现hibernate存在BUG
具体参看
http://tracelive.net/20091103/303.html
https://forum.hibernate.org/viewtopic.php?f=1&t=955540&start=0&sid=99670e64b5383741480ae8b5780b9642
请更新hibernate到3.2.1解决此问题