Java Platform, Standard Editionトラブルシューティング・ガイド
目次      

2.12 jhatユーティリティ

jhatツールは、ヒープ・スナップショット内のオブジェクト・トポロジを参照するための便利な手段を提供します。このツールはヒープ解析ツール(HAT)にかわるものです。

jhatユーティリティの詳細は、jhatコマンドのマニュアル・ページを参照してください。

このツールは、バイナリ形式のヒープ・ダンプ(jmap -dumpで生成されたヒープ・ダンプなど)を解析します。

このユーティリティは、意図しないオブジェクト保持のデバッグに役立つ可能性があります。この用語は、もう不要になっているけれども、ルート・セットからの一部のパス経由での参照のためにライブに保たれているオブジェクトを記述するために使用されます。これは、オブジェクトが不要になった後もオブジェクトへの意図しない静的参照が残っている場合、ObserverやListenerで不要になった対象からの登録解除が失敗した場合、オブジェクトを参照しているThreadが終了すべきときに終了しない場合などに発生することがあります。意図しないオブジェクト保持は、Java言語ではメモリー・リークに相当します。

次の項では、jhatユーティリティのトラブルシューティング手法を説明します。

2.12.1 jhatユーティリティによるトラブルシューティング

このツールには標準クエリーがいくつか用意されています。たとえば、ルート・セットから指定されたオブジェクトまでのすべての参照パスを表示する「ルート」クエリーは、不要なオブジェクト保持の発見に特に役立ちます。

標準クエリーに加え、Object Query Language (OQL)インタフェースで独自のカスタム・クエリーを開発することもできます。

jhatコマンドを発行すると、このユーティリティにより、指定されたTCPポート上でHTTPサーバーが起動されます。その後、任意のブラウザを使ってサーバーに接続し、指定したヒープ・ダンプに対してクエリーを実行できます。

例2-17は、jhatを実行してsnapshot.hprofという名前のヒープ・ダンプ・ファイルを分析する方法を示しています。

この時点でjhatにより、ポート7000上でHTTPサーバーが起動されています。ブラウザをhttp://localhost:7000にポイントしてjhatサーバーに接続します。

サーバーに接続されている場合は、標準クエリーの実行(「標準クエリー」を参照)またはOQLクエリーの作成(「カスタム・クエリー」」を参照)ができます。「すべてのクラス」クエリーがデフォルトで表示されます。

2.12.2 標準クエリー

jhatサーバーに接続したら、次の標準クエリーを実行できます。

2.12.4 ヒープ分析のヒント

jhatから有用な情報を得るには、アプリケーションと、そこで使用されているライブラリやAPIに関するある程度の知識が要求されることがよくあります。jhatを使用すると、次の2つの重要な質問に回答できます。

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.