Malloc log

Malloc Log は、malloc サブシステムのオプションの拡張機能であり、ユーザーはこれを使用して、呼び出しプロセスがその時点で保持しているアクティブな割り当てに関する情報を取得することができます。 このデータは、問題判別およびパフォーマンス分析に使用することができます。

malloc log に記録されるデータ

Malloc Log は、アクティブな割り当てごとに以下のデータを記録します。
  • 呼び出し側に戻されたアドレス。
  • 割り当てたサイズ。
  • 割り当てをサービスしたヒープ。
  • 呼び出し関数のスタック・トレースバック。 記録されるトレースバックの深さは、構成可能オプションです。
上記に加えて、以下の情報もログに記録することができます (オプション)。
  • 呼び出しプロセスのプロセス ID。
  • 呼び出しスレッドのスレッド ID。
  • プロセスの始動に関する割り当ての順序番号。
  • 割り当てが行われた実時間。

Malloc Log を使用可能にすると、正常な割り当てごとにメタデータが保管されるので、追加のオーバーヘッドが必要になります。 このオーバーヘッドは、32 ビット・アプリケーションの場合は約 50 から 100 バイトで、64 ビット・アプリケーションの場合はその 2 倍です。 オーバーヘッドの量は、設定されているオプションに応じて変わります。

Malloc Log の情報には、以下の方法でアクセスすることができます。
  • DBX malloc サブコマンドを使用する。
  • report_allocations malloc デバッグ・オプションを使用する。

malloc log の使用可能化

Malloc Log はデフォルトでは使用可能になりません。 Malloc Log をデフォルトの設定で使用可能にするには、MALLOCDEBUG 環境変数を次のように設定します。
MALLOCDEBUG=log
Malloc Log をユーザー指定の構成オプションを用いて使用できるようにするには、MALLOCDEBUG 環境変数を次のように設定します。
MALLOCDEBUG=log:extended,stack_depth:6
注: デフォルトの Malloc Log 値は、次のとおりです。
extended
デフォルトはオフです。 このオプションを指定すると、上記のオプションのメタデータの割り当てのロギングが使用可能になります。 このパラメーターは、割り当てごとに必要なオーバーヘッドの量に影響を及ぼします。MALLOCTYPEwatson2 に設定されている場合は、このオプションは何ら効果がありません。
stack_depth
各割り当てごとに記録される関数呼び出しスタックの深さを指定するために使用されます。 このパラメーターは、割り当てごとに必要なオーバーヘッドの量に影響を及ぼします。 デフォルト値は 4、最大値は 64 です。

制限

Malloc Log を使用可能にすると、メモリーにデータを保管するというコストのために、 すべてのプログラムのパフォーマンスが低下します。 メモリーの使用率も上がります。