ユニットテストは既に完了していて、純粋に結合テストを行う予定だった。
テスト仕様書は無論完成していて、テスト環境も先発隊が構築しているので、
ちょっとした旅行気分で臨んでいた。
その甘い考えは、初日で早くも崩れ去るのであった。
画面から業務データを作成して、ワークフローが正常に流れることを確認しようとしたのだが、
初っ端の登録の段階で早くもシステムエラーが発生。
ログを解析すると、OutOfMemoryなるメッセージを発している。
たった、1トランザクションでメモリを食い潰すとはどんなコーディングをしているものか。
それに、ユニットテストの環境でも同様の事象が発生していたに違いない。
だが、そのプログラムのコーディング及びユニットテストを担当していた開発者は、
契約切れでそこにはいなかった。
已む無くデバッグすることになったのだが、
膨大なプログラムを一行ずつデバッグする訳にもいかないので、
Profilerを利用してメモリの計測をすることとなった。
いざ、実践してみるとメモリの使用量を表すグラフが急激に上昇しているのがハッキリと分かる。
例えるなら、倍々ゲームという言葉が一番適当かと。
その箇所をプログラムで確認すると、MapクラスのputAllを連発している。
putAllしか知らないのでは思ってしまうぐらいの勢いで
全て(※無駄なデータが大半)のデータの受け渡しをputAllで行っている。
メモリリークを起こして当然の結果である。
その担当者が作成したプログラムは全て同じ形式で記述されていた為、
回収を余儀なくされたのは言うまでもない。
<環境>
OS:Windows2000
JDK:jdk1.5
Eclipse:3.1
Tomcat:5.5
Tomcatプラグイン:Sysdeo Tomcat Launcher Plugin 3.2
1.Profilerプラグインをダウンロード
2.Eclipse3.1用パッチの適用
profiler_jars.part1~4.rarをダウンロードし、解凍。
profiler_trace.jar、profiler_ui.jarをProfilerフォルダへ上書きコピーする。
3.実行ライブラリの配置
ProfilerフォルダにあるProfilerDLL.dllをJAVA_HOME\JRE\BIN\にコピー。
4.Eclipseの設定
設定→Tomcat→JVMの設定→JVMパラメータの追加
-D__PROFILER_TIMING_METHOD=1
-D__PROFILER_USE_PACKAGE_FILTER=1
-D__PROFILER_PACKAGE_FILTER=__M__sun.;__M__com.sun.;__M__java.;__M__javax.;__M__org.apache.;__P__jp.co.xxx ←業務パッケージ
-XrunProfilerDLL:1