Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.2.2. Valgrind を使ったアプリケーションのメモリー使用量のプロファイリング

Valgrind はユーザー領域のバイナリーに対するインストルメンテーションを提供するフレームワークになります。プログラムのパフォーマンスのプロファイリングや分析に使用できるツールがいくつか収納されています。このセクションで説明している valgrind ツールは、初期化されていないメモリーの使用、不適切なメモリー割り当て、割り当て解除などのメモリーに関するエラーの検出に役立ちます。
valgrind やそのツールを使用するには valgrind パッケージをインストールします。
# yum install valgrind

7.2.2.1. Memcheck を使ったメモリー使用量のプロファイリング

Memcheckvalgrind のデフォルトツールです。これは、以下のような多くのメモリーエラーを検出し、報告することが困難となる可能性のあるメモリーエラーについて検出および報告します。
  • 発生すべきでないメモリーアクセス
  • 未定義または初期化されていない値の使用
  • 誤って解放されたヒープメモリー
  • ポインターの重複
  • メモリーリーク
注記
Memcheck が行うのはエラーの報告だけでありその発生を防ぐことはできません。通常、セグメンテーション違反が発生するような形でプログラムによるメモリーアクセスが行われればセグメンテーション違反は発生します。ただし、memcheck により違反が発生する直前にエラーメッセージがログ記録されるようになります。
memcheck はインストルメンテーションを使用するため memcheck を付けて実行されるアプリケーションの実行速度は通常に比べ 10 倍から 30 倍ほど遅くなります。
アプリケーションで memcheck を実行するには次のコマンドを実行します。
# valgrind --tool=memcheck application
次のオプションを使用すると特定の問題タイプの memcheck 出力に集中させることもできます。
--leak-check
アプリケーションの実行が完了すると memcheck によりメモリーリークの検索が行われます。デフォルト値は検出したメモリーリーク数を出力する --leak-check=summary になります。--leak-check=yes--leak-check=full を指定するとリークそれぞれの詳細を出力させることができます。無効にする場合は --leak-check=no を指定します。
--undef-value-errors
デフォルト値は未定義の値が使用された場合にエラーを報告する --undef-value-errors=yes です。--undef-value-errors=no を指定するとこの報告を無効にしてメモリーチェックの速度を若干早めることができます。
--ignore-ranges
--ignore-ranges=0xPP-0xQQ,0xRR-0xSS などのようにメモリーアクセスを確認する際 memcheck に無視させる範囲を指定します。
memcheck オプションの全一覧は /usr/share/doc/valgrind-version/valgrind_manual.pdf に収納されているドキュメントをご覧ください。