0

JSP Web アプリケーションで Java 1.4 を使用していますが、Web アプリケーションが完全に停止することがあります。ユーザーがホームページにアクセスしようとすると、ページが見つかりません。

これが発生した場合、スタック ダンプを実行し、samurai を使用して、同じメッセージで複数のブロックされたスレッドを確認できます。

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、どうもありがとう。これをアーキテクトに持っていき、このアップグレードを実行できるかどうかを確認します. これはたまにしか発生しないため、これが原因であるかどうかを確認するには時間がかかります。時間だけが電話できるので、数か月後にフィードバックします。どうもありがとう

4

1 に答える 1

3

追加の調査に基づいて、以前の回答に追加します。

3.2.6 より古い Hibernate バージョンを使用しているようです (この欠陥に対処した場所)。欠陥 ID: HHH-2645

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


通常、「waiting to lock <0x23e40898>」メッセージと「setting lock <0x23e40898>」メッセージを一致させることができるはずです (つづりが間違っている可能性があります)。完全なスタック ダンプを実行し (ちなみに jstack を使用できます。これは JDK の標準です)、ロック ID を検索します。一連の待機が表示されますが、それを設定するスレッドも表示されます。

于 2012-07-05T13:58:24.413 に答える