1

JRockitjvmがこのスタックでスタックするという問題が発生しています。

"[STUCK] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" id=45 idx=0x94 tid=9944 prio=1 alive, in native, daemon
    at jrockit/vm/Allocator.nativeGetNewTLA()V(Native Method)
    at jrockit/vm/Allocator.getNewTLA(Allocator.java:788)[optimized]
    at jrockit/vm/Allocator.allocLargerThanFreeTLA(Allocator.java:816)[inlined]
    at jrockit/vm/Allocator.allocSlowCaseInner(Allocator.java:930)[inlined]
    at jrockit/vm/Allocator.allocSlowCase(Allocator.java:776)[optimized]
    at oracle/jdbc/driver/T4CMAREngine.unmarshalCLRforREFS(T4CMAREngine.java:2024)[optimized]
    at oracle/jdbc/driver/T4CTTIoer.unmarshal(T4CTTIoer.java:160)[optimized]
    at oracle/jdbc/driver/T4C8Oall.receive(T4C8Oall.java:727)[optimized]
    at oracle/jdbc/driver/T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)[inlined]
    at oracle/jdbc/driver/T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)[optimized]
    at oracle/jdbc/driver/OracleStatement.executeMaybeDescribe(OracleStatement.java:1060)[optimized]
    at oracle/jdbc/driver/T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)[optimized]
    at oracle/jdbc/driver/OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)[optimized]
    at oracle/jdbc/driver/OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)[optimized]
    at oracle/jdbc/driver/OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3361)[optimized]
    ^-- Holding lock: oracle/jdbc/driver/T4CPreparedStatement@0x1d8f8268[thin lock]
    ^-- Holding lock: oracle/jdbc/driver/T4CConnection@0x14d68fd8[thin lock]
    at weblogic/jdbc/wrapper/PreparedStatement.executeQuery(PreparedStatement.java:97)[optimized]

メモリを割り当てようとしてスタックしているようです。監視ツールによると、サーバーがスタックする前のヒープ使用量は約14%で20%未満でした。

これはJavaバージョンです:

java version "1.5.0_14"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
BEA JRockit(R) (build R27.5.0-110_o-99226-1.5.0_14-20080528-1505-linux-x86_64, compiled mode)

これらは私たちが使用しているJVM設定です

-Xms256m -Xmx3072m -Xverify:none 

この問題を引き起こしている可能性のあるアイデアはありますか?

4

2 に答える 2

3

追加のTLA(スレッドローカルエリア)スペースを割り当てようとすると、スタックしているように見えます。スレッドローカルエリア(TLA)は、ヒープまたはナーサリーに予約され、専用のスレッドに与えられる空き領域のチャンクです。スレッドは、他のスレッドと同期せずに、独自のTLAに小さなオブジェクトを割り当てることができます。TLAがいっぱいになると、スレッドは単に新しいTLAを要求します。jrockitがメモリの割り当てに失敗したため、スレッドがスタックします。

スタックトレースから、これはデータベースからデータを読み取っているときに発生するため、読み取りオブジェクト用の十分なTLAスペースがなかったことを意味している可能性があります。このクエリはデータベースから多くのレコードを読み取っていますか?

TLAサイズを調整することで、この問題の解決を試みることができます

于 2013-03-12T13:57:22.797 に答える
1

ほとんどの場合、問題はDB操作に関連していますHolding lock: oracle/jdbc/driver/T4CPreparedStatement@0x1d8f8268[thin lock]

サーバーで上記の問題が発生したときにDB操作が実行中であったかどうかを確認しましたか?

以下を確認できます。

  • 長時間実行されるクエリ
  • DBの応答が遅くなる原因となるDBサーバーに関連する問題
  • DBから大量のデータを読み込もうとするDB操作
于 2013-01-27T16:33:37.147 に答える