以前のブログエントリーで、Java ヒープ領域のメモリリーク発見支援ツールとして、以下のような jmap コマンドを実行して取得したヒストグラム比較して、オブジェクト数の差分でソートして降順で出力するというツールを作ったのでちょこちょこ更新して晒し中。
jmap -histo:live [対象 Java アプリケーションのプロセス ID]
3 日前に、こちらのブログエントリーにあるとおり、日本語対応したりと新機能というよりは主に品質向上に努めましたが、今回は単一ヒストグラムファイルを比較せずに単にソートする機能と CSV 形式で結果出力する機能を追加しました。以下、version 0.4 として、Runnable jar なファイルとソースコードを添付、ならびに Javadoc を晒します。
- Runnable jar: JavaObjDiff-v0.4.jar
- ソースコード: JavaObjDiff-v0.4-src.zip
- Javadoc: http://www.geocities.jp/akihiro_quitada/Mononov/Javadoc/04/
ソースコードは見る価値は特にないです(わけわかめ状態になってきたので、スマートに実装したい…)。使い方ですが、前バージョン同様、添付 jar ファイルを CLASSPATH に通した状態で以下のコマンドを実行してもよいですし…
java quitada.JavaObjectDiff [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]
Runnable jar なので、以下でもよいです。
java -jar JavaObjDiff-v0.4.jar [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]
比較しないでソートだけする機能をつけたので、以下でも動きます。
CSV 形式で結果出力するには --format:csv と指定します。
java -jar JavaObjDiff-v0.4.jar --format:csv [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]
詳しい使い方とか、シュガーシンタックス的なものは、--help オプションで確認してください。
java -jar JavaObjDiff-v0.4.jar --help
機能追加以外にも色々と対応したいことがでてきたので、今後のロードマップを若干変更したく思います。
- バージョン 0.4.5: 来月までに対応したい
- Google code を使った開発体制の確立
- API 見直し(非互換発生予定)
- 例外ハンドリングを main 関数側にたおして、API として使いやすくする
- ファクトリーメソッドの提供
- 結果を標準出力にだすだけでなくて、配列で返すとか、アプリケーションに組み込んで使用しやすくする
- ロジック見直し:差分を計算するロジックと、ソートするロジックのメソッド分割とか
- 自動テストツールの開発(JUnit とかですかね…)
- バージョン 0.5: 7 月中に対応したい
- CSV 形式で、各要素をダブルコーテーションとかシングルコーテーションとかでくくった形で出力する機能
- オプションをプロパティファイルで指定する機能
- GAE 上の Web アプリケーションとして提供
[rakuten:book:13450738:detail]
- バージョン 0.6: 9 月中に対応したい
- ヒストグラムを Hadoop HDFS やら Pivotal GemFire やら Redis に格納可能してイテレーティブに比較できるような基盤作り
- 作者: 田澤孝之,横井浩,松井一比良
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/27
- メディア: 単行本(ソフトカバー)
- クリック: 5回
- この商品を含むブログ (2件) を見る
- 作者: Josiah L. Carlson
- 出版社/メーカー: Manning Publications
- 発売日: 2013/06/28
- メディア: ペーパーバック
- クリック: 1回
- この商品を含むブログを見る
- バージョン 1.0: 今年中に作りたい・対応したい
- バージョン 1.1 or later: できるかどうか不明なので予定は未定