以前のブログエントリーで、Java ヒープ領域のメモリリーク発見支援ツールとして、以下のような jmap コマンドを実行して取得したヒストグラム比較して、オブジェクト数の差分でソートして降順で出力するというツールを作ったのでちょこちょこ更新して晒し中。
jmap -histo:live [対象 Java アプリケーションのプロセス ID]
6 日前に、こちらのブログエントリーにあるとおり、差分を昇順でソートしたりクラス名でソートしたりできるように機能追加しましたが、今回は日本語対応(I18N と L10N)とかしてみました。以下、version 0.3.5(新機能とか特にないので、v0.3 ベース扱い) として、Runnable jar なファイルとソースコードを添付します。
- Runnable jar: JavaObjDiff-v0.3.5.jar
- ソースコード: JavaObjDiff-v0.3.5-src.zip
ソースコードは見る価値は特にないです(とはいえ色々と苦心してますが)。使い方ですが、前バージョン同様、添付 jar ファイルを CLASSPATH に通した状態で以下のコマンドを実行してもよいですし…
java quitada.JavaObjectDiff [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]
Runnable jar なので、以下でもよいです。
java -jar JavaObjDiff-v0.3.5.jar [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]
今回は日本語対応したので、日本語環境で実行すると以下のように日本語で出力されます(表示ずれ防止のため、等幅フォントの利用推奨)。
インスタンス数で降順にソート
インスタンス数の差分 バイト数の差分 クラス名
-------------------- -------------- --------
10828 731832 [B
10244 245856 java.util.concurrent.ConcurrentHashMap$HashEntry
10000 320000 com.gemstone.gemfire.internal.cache.VMThinRegionEntry
10000 160000 com.gemstone.gemfire.internal.cache.VMCachedDeserializable
9872 157952 java.lang.Integer
5789 138936 java.util.concurrent.locks.ReentrantLock$NonfairSync
5632 180224 java.util.concurrent.ConcurrentHashMap$Segment
:
どうしても英語で表示したい場合は、以下のように、-Duser.language=en とかつければいいでしょう。
java -Duser.language=en -jar JavaObjDiff-v0.3.5.jar ....
詳しい使い方とか、シュガーシンタックス的なものは、--help オプションで確認してください。
java -jar JavaObjDiff-v0.3.5.jar --help
今回は、色々見直し中心のリリースで、日本語対応の他にも以下の対応をしてます。
- ソート用に用意している java.util.Comparator を実装したクラスが、ソート対象やソート順指定が増える度に増加していたので、共通クラス 1 つにした
- コンソール表示の見直し(数値の大小によって、表示が各カラムからずれてしまっていたので)
- API 公開 + Javadoc 整備して、Javadoc はこちらに晒してます
- イレギュラーなオプション指定(ヒストグラムファイル名の間に指定したり)への対処
- イレギュラーなヒストグラムへのエラーハンドリング対応(以前は、例外メッセージとスタックをだしていただけなので)
機能追加以外にも色々と対応したいことがでてきたので、今後のロードマップを若干変更したく思います。
- バージョン 0.4: 今月中に作りたい
- バージョン 0.4.5: 来月までに対応したい
- Google code を使った開発体制の確立
- API 見直し(非互換発生予定)
- 例外ハンドリングを main 関数側にたおして、API として使いやすくする
- ファクトリーメソッドの提供
- 結果を標準出力にだすだけでなくて、配列で返すとか、アプリケーションに組み込んで使用しやすくする
- ロジック見直し:差分を計算するロジックと、ソートするロジックのメソッド分割とか
- 自動テストツールの開発(JUnit とかですかね…)
- バージョン 0.5: 7 月中に対応したい
- CSV 形式で、各要素をダブルコーテーションとかシングルコーテーションとかでくくった形で出力する機能
- バージョン 1.0: 今年中に作りたい・対応したい
- バージョン 2.0 or later: できるかどうか不明なので予定は未定
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (69件) を見る