Quitada ブログ HAX

Hatena Blog でも Quitada ブログ

Java ヒープ領域のメモリリーク発見支援ツール - ソートオンリーモード・CSV 出力

以前のブログエントリーで、Java ヒープ領域のメモリリーク発見支援ツールとして、以下のような jmap コマンドを実行して取得したヒストグラム比較して、オブジェクト数の差分でソートして降順で出力するというツールを作ったのでちょこちょこ更新して晒し中。

jmap -histo:live [対象 Java アプリケーションのプロセス ID]

3 日前に、こちらのブログエントリーにあるとおり、日本語対応したりと新機能というよりは主に品質向上に努めましたが、今回は単一ヒストグラムファイルを比較せずに単にソートする機能と CSV 形式で結果出力する機能を追加しました。以下、version 0.4 として、Runnable jar なファイルとソースコードを添付、ならびに Javadoc を晒します。

ソースコードは見る価値は特にないです(わけわかめ状態になってきたので、スマートに実装したい…)。使い方ですが、前バージョン同様、添付 jar ファイルを CLASSPATH に通した状態で以下のコマンドを実行してもよいですし…

java quitada.JavaObjectDiff [メモリリーク前のヒストグラムファイル] [メモリリーク後のヒストグラムファイル]

Runnable jar なので、以下でもよいです。

java -jar JavaObjDiff-v0.4.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]

はじめてのHadoop ~分散データ処理の基本から実践まで

はじめてのHadoop ~分散データ処理の基本から実践まで

Redis in Action

Redis in Action

  • バージョン 1.0: 今年中に作りたい・対応したい
    • GUI の提供。ナイスな GUI 開発ツールを選定したいところ
    • Java スレッドダンプ解析とかに有用な、GUI tail ツール「」みたいなイケメンな名前をつけたい
    • 専用 Web サイト開設
  • バージョン 1.1 or later: できるかどうか不明なので予定は未定
    • ヒープダンプも読み込めるようにしたい
    • プロセスアタッチして、定期的にオブジェクトカウントの差分とか取得する機能の追加
    • tail -f みたいにヒストグラムを抽出して、オブジェクトカウントの差分とか取得する機能の追加
    • 他の JVM 実装のヒストグラムフォーマットへの対応
    • jconsole のプラグインとして提供
    • データサイエンティストが様々なでデータ解析できるような機能