Java堆栈转储 - 等待锁定

时间:2012-07-05 13:47:34

标签: java blocked-threads

我们在JSP Web应用程序上使用java 1.4,并且我们的Web应用程序不时完全停止。当用户尝试访问主页时,他们无法找到页面。

当发生这种情况时,我们运行堆栈转储并使用武士我可以看到几个被阻止的线程具有相同的消息

at java.util.Collections$SynchronizedMap.get(Collections.java:1942)      
- waiting to lock <0x23e40898> (a 
java.util.Collections$SynchronizedMap)      at 
org.hibernate.tuple.EntityModeToTuplizerMapping.getTuplizerOrNull(EntityModeToTuplizerMapping.java:53)      at 
org.hibernate.tuple.EntityModeToTuplizerMapping.getTuplizer(EntityModeToTuplizerMapping.java:66)      at 
org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)      at 
org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:379)      at 
org.hibernate.pretty.MessageHelper.infoString(MessageHelper.java:89)      at 
org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1355)      at 
org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)      at org.hibernate.loader.Loader.getRow(Loader.java:1206) 
     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)      at 
org.hibernate.loader.Loader.doQuery(Loader.java:701)      at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)      at 
org.hibernate.loader.Loader.doList(Loader.java:2220)      at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
     at org.hibernate.loader.Loader.list(Loader.java:2099)      at 
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)      at 
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)      at 
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)      at 
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)      at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)      at 
org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:849)      at
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)      at 
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:840)      at
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:836)

如何确定持有此主题的内容。我可以使用任何工具来识别它吗?

由于


嗨Mprivat,非常感谢。我将把这个带给我们的架构师,看看我们是否可以完成这个升级。由于这只是偶尔发生一次,所以需要一些时间才能看出这是否是原因。我会在几个月后反馈,因为只有时间才能通电话。非常感谢

1 个答案:

答案 0 :(得分:3)

在我之前基于其他研究的答案之前:

听起来你正在使用早于3.2.6的Hibernate版本(他们解决了这个缺陷)。缺陷ID:HHH-2645

http://lists.jboss.org/pipermail/hibernate-issues/2008-February/009043.html


通常,您应该能够匹配“等待锁定&lt; 0x23e40898&gt;”带有“设置锁定&lt; 0x23e40898&gt;”的消息消息(拼写可能会警惕)。做一个完整的堆栈转储(你可以使用jstack,它是JDK的标准配置),并搜索你的锁ID。你会看到一堆等待,但也是设置它的线程。