8
2

More than 1 year has passed since last update.

Java: WebSphereでデータベースとのコネクションリークを検出する

Last updated at Posted at 2022-02-23

概要

データベースとのコネクションリーク(接続の解放漏れ)が疑われる場合、問題の処理を特定するにはどうすればよいでしょうか。WebSphere上にデプロイしているアプリケーションの場合、管理コンソールからログレベルを上げることで、問題の処理を特定できる可能性があります。

手順

  1. WebSphereの管理コンソールにて、 トラブルシューティング > ログおよびトレース > (サーバー名称) > ログ詳細レベルの変更 を選択する
  2. 初期状態では *=info が指定されているはず。末尾に :ConnLeakLogic=finest を追加する
  3. *=info: ConnLeakLogic=finest と入力したことを確認する
  4. 設定の反映のために、サーバーを再起動する

結果

$WAS_HOME/Profiles/node/logs/%Server_Name%/trace.log を確認します。

たとえば、コネクションリークによるコネクションプールの枯渇が発生している場合、下記のようなStackTraceが出力されます。既定では、10秒以上使用されているデータベース接続を出力するようです。

000000xx FreePool      E   J2CA0045E: リソース jdbc/xxx に対してメソッド createOrWaitForConnection を呼び出しているとき、接続が利用不能でした。
000000xx ConnLeakLogic 3   Dumping initial request stack traces
000000xx ConnLeakLogic 3   MCWrapper id xxxxxxxx  Managed connection WSRdbManagedConnectionImpl@57055705  State:STATE_ACTIVE_INUSE Thread Id: 000000xx Thread Name: Thread-xx Handle count 1
in-use for 720000ms
java.lang.Throwable
at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:899)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:668)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:635)
at (以下略)

参考URL

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2