ps
で または同様のツールを使用すると、そのプロセスによって割り当てられたメモリ ページの量のみを取得できます。この数字は正しいですが、
-
アプリケーションが使用する実際のメモリ量は反映されず、アプリケーション用に予約されたメモリ量のみが反映されます
-
複数のスレッドや動的にリンクされたライブラリを使用するなど、ページが共有されている場合、誤解を招く可能性があります
アプリケーションが実際に使用するメモリの量を本当に知りたい場合は、プロファイラー内で実行する必要があります。たとえば、Valgrind は、使用されているメモリの量、さらに重要なこととして、プログラムで発生する可能性のあるメモリ リークについての洞察を得ることができます。 Valgrind のヒープ プロファイラー ツールは「massif」と呼ばれます:
Massif はヒープ プロファイラーです。プログラムのヒープの定期的なスナップショットを取得して、詳細なヒープ プロファイリングを実行します。プログラムのどの部分が最も多くのメモリ割り当てを担当しているかに関する情報を含む、経時的なヒープ使用量を示すグラフを生成します。グラフは、最も多くのメモリが割り当てられている場所を特定するための詳細情報を含むテキスト ファイルまたは HTML ファイルによって補足されます。 Massif は通常より約 20 倍遅くプログラムを実行します。
Valgrind のドキュメントで説明されているように、Valgrind を介してプログラムを実行する必要があります。
valgrind --tool=massif <executable> <arguments>
Massif は、メモリ使用量のスナップショットのダンプを書き込みます (例:massif.out.12345
)。これらは、(1) メモリ使用量のタイムライン、(2) 各スナップショットについて、プログラム メモリが割り当てられた場所の記録を提供します。これらのファイルを分析するための優れたグラフィカル ツールは、massif-visualizer です。しかし、ms_print
を見つけました 、Valgrind に同梱されている単純なテキストベースのツールであり、すでに非常に役に立っています。
メモリ リークを見つけるには、(デフォルト) memcheck
を使用します。 valgrind のツール。
pmap コマンドを試してください:
sudo pmap -x <process pid>