1

開発アプリケーションで Java スレッドがハングするという問題に直面しています。ログ トレースは次のとおりです。  

020 SystemOut     O --------------------------------------------------------------------------------
[8/1/12 11:00:21:136 CDT] 00000023 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 6" (00000027) has been active for 731757 milliseconds and may be hung.  There is/are 2 thread(s) in total in the server that may be hung.
[8/1/12 11:00:24:626 CDT] 00000021 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/RTNCTR_DEV.
[8/1/12 11:00:24:636 CDT] 00000021 SystemOut     O 
[8/1/12 11:00:24:636 CDT] 00000021 SystemOut     O --------------------------------------------------------------------------------

この問題の根本的な原因を見つけることができません。可能な解決策をアドバイスしてください。

4

2 に答える 2

2

データソース 'jdbc/RTNCTR_DEV' への接続を待機しているようです。私の推測では、接続が利用できないか、アプリケーションが接続をリークしていると思います。beny23 が以前に言ったことを実行します。それは、接続が機能するかどうか (おそらく再起動後) を確認することです。接続が機能し、突然停止した場合 (たとえば、10 回のクエリの後)、リークが発生しています。まったく機能しない場合は、WAS のデータソース構成を確認してください。

リークの場合は、アプリケーションを調べて、接続をプールに戻していないか、接続を閉じていない場所を見つけます。すべては、アプリケーションの動作に依存します。

同様の問題もありました。データソースにカスタム設定を追加して、接続設定を false に設定することで解決することが判明しました。もちろん、最初に、接続をリークしていたのはアプリケーションではないと判断しました。

于 2012-08-14T22:09:17.827 に答える
2

まず、 javacore スレッド ダンプを要求して、特定のスレッドがスタックしている場所を見つけます。

UNIX プラットフォームでは、プロセス ID に対して kill -3 を発行するだけです。Windows では、 wsadmin コマンドを使用する必要があります(UNIX でも機能しますが、kill -3 ほど速くはありません)。

結果のファイルで を検索するWebContainer : 6と、そのスレッドのスタック トレースによって、スレッドがアプリケーションまたは WebSphere のどこでスタックしているかがわかります。

WebSphere Application Server からの javacore ファイルの問題判別を参照してください。

于 2012-08-14T14:08:40.690 に答える