メモリー割り当てメトリック

メモリー割り当てメトリックは、コレクタが記録したヒープトレースデータにもとづいて算出されます。 ヒープトレース処理では、C 標準ライブラリメモリー割り当て関数 mallocreallocmemalign および割り当て解除ルーチン free の呼び出しがコレクタによって阻止され、呼び出しに関するデータが実験に記録されます。 アナライザは、割り当て関数の呼び出しとメモリーの割り当てを解除する free の呼び出しとの照合を行い、下の表に示すメトリックを算出します。 realloc の呼び出しは、free の呼び出しに続いて malloc を呼び出すことであると解釈されます。

Java[tm] プログラミング言語で作成されたアプリケーションの場合、ヒープトレースデータはユーザーコードによって生成されたオブジェクト割り当てイベントと、ガベージコレクタによって生成されたオブジェクト割り当て解除イベントを記録します。 また、mallocfree などを使用した場合も、記録の対象となるイベントが生成されます。 これらのイベントは、ネイティブコードから生成される場合もあれば、Java 仮想マシン自体から生成される場合もあります。 データ収集プロセスはメモリー割り当てとガベージコレクションの記述に JVMPI イベントを使用しますが、これにより実行時間が大幅に延びることがあります。 ほとんどの Java テクノロジに基づくアプリケーションではこのようなイベントが多数存在するため、大規模な実験が必要となったり、データを処理する上でのスケーラビリティの問題が発生したりします。 また、これらのイベントが要求される場合には、ガベージコレクタがインライン化された割り当ての一部を無効にします。この結果、割り当てパスが長くなり、CPU 時間がより多くかかります。

メトリック 定義
割り当て メモリー割り当て関数の呼び出し数。
割り当てバイト数 メモリー割り当て関数の各呼び出しで割り当てられるバイト数の合計。
リーク free 呼び出しが対応していなかったメモリー割り当て関数の呼び出し数。
リークバイト数 割り当てられたけれども解放されなかったバイト数。

フィルタリングを使用してスレッド、LWP、または標本によってデータを選択すると、free 呼び出しが選択データの中にあるかどうかに関係なく、選択データ内の割り当て呼び出しとその対応する free 呼び出しとの照合が行われます。

コレクタは自身の関数を C 標準ライブラリ関数に割り込ませるため、そのメトリックはコレクタライブラリ libcollector.so の関数群のバージョンのものと考えられます。

リークと割り当てを示すリストが「リーク一覧」タブに表示されます。

関連項目
「リーク一覧」タブ
時間メトリック
ハードウェアカウンタメトリック
スレッド同期遅延メトリック
MPI トレースメトリック
排他的メトリック、包括的メトリック、属性メトリック
データ表示設定の変更

著作権と商標について