Java Stack Dump - ожидает блокировки

Мы используем java 1.4 в нашем веб-приложении JSP, и время от времени наше веб-приложение полностью останавливается. Когда пользователи пытаются получить доступ к домашней странице, они не могут найти страницу.

Когда это происходит, мы запускаем дамп стека и, используя самураев, я вижу несколько заблокированных потоков с одним и тем же сообщением.

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)

Как я могу определить, что удерживает эту тему? Есть ли какой-нибудь инструмент, который я могу использовать, чтобы определить это?

Спасибо


Привет, Мприват, спасибо большое. Я передам это нашему архитектору и посмотрим, сможем ли мы сделать это обновление. Так как это происходит только время от времени, потребуется некоторое время, чтобы понять, было ли это причиной. Я буду отзыв через несколько месяцев, как только время может тел. большое спасибо

1 ответ

Решение

Прежде чем перейти к моему предыдущему ответу, основанному на дополнительных исследованиях:

Похоже, вы используете версию Hibernate старше, чем 3.2.6 (там, где они исправили этот дефект). ID дефекта: HHH-2645

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


Как правило, вы должны иметь возможность сопоставлять сообщения "ожидание блокировки <0x23e40898>" с сообщением "установка блокировки <0x23e40898>" (правописание может вызывать опасения). Сделайте полный дамп стека (кстати, вы можете использовать jstack, это стандартно для JDK) и найдите свой идентификатор блокировки. Вы увидите кучу ожиданий, а также поток, который его устанавливает.

Другие вопросы по тегам