「見える化」でJavaシステムを診断する
Jakarta Commons DBCPを利用したプログラムのメモリ使用量が上昇し続ける問題に対して、
ENdoSnipeを利用した問題発見・解析・対処の具体例をご紹介いたします。
※メモリリークについての詳細はこちらのページをご参照ください。
シーン1
プログラムにENdoSnipeを適用したところ、
BottleneckEyeのグラフより物理メモリ・仮想マシンメモリの増加を検出しました。
シーン2
シーン3
BottleneckEyeのグラフより、要素数の増加を検出しました。
シーン4
ENdoSnipeではコンテナクラスに閾値以上の要素数が追加された場所を記録しています。
この箇所からメモリリークの原因を調査していきます。
シーン5
Jakarta Commons DBCPのPrepared Statementプーリング機能には次の特徴があります。
●プーリングしたPrepared Statementオブジェクトは接続が破棄されるまで開放されることはありません。
●このため、次の条件を満たすプログラムではPrepared Statementオブジェクトが大量にプーリングされ、
メモリ使用量を増加させます。
1)時刻ごとに変化し続けるSQL文をパラメータ化せずに発行する。
2)一つの接続を再利用し続ける。
シーン6
シーン7
メモリリーク対処をしたプログラムに再度ENdoSnipeを適用したところ、メモリ使用量の増加が検出されなくなりました。
※メモリリークについての詳細はこちらのページをご参照ください。