Linux でアプリケーションまたはプロセスのメモリ使用量をどのように測定しますか?
ブログ記事よりLinux でのメモリ使用量の理解は、ps
この目的に使用する正確なツールではありません。
なぜ
ps
「間違っている」のか見方によっては、
ps
はプロセスの実際のメモリ使用量を報告しているわけではありません。 実際に行っているのは、が唯一のプロセスとして実行されている場合に、各プロセスが占める実際のメモリ量を示しています。 もちろん、一般的な Linux マシンでは、常に数十のプロセスが実行されています。つまり、 が報告する VSZ と RSS の数値はps
ほぼ間違いなく間違っていることになります。
(注:この質問はここ非常に詳細に。
ベストアンサー1
または同様のツールを使用すると、ps
そのプロセスによって割り当てられたメモリ ページの量のみを取得できます。この数値は正しいですが、次のようになります。
アプリケーションが実際に使用するメモリ量ではなく、アプリケーション用に予約されているメモリ量のみを反映します。
ページが複数のスレッドや動的リンクライブラリによって共有されている場合、誤解を招く可能性があります。
アプリケーションが実際に使用するメモリの量を知りたい場合は、プロファイラー内で実行する必要があります。たとえば、ヴァルグリンド使用されているメモリの量、そしてさらに重要なことに、プログラム内のメモリリークの可能性についての洞察を得ることができます。Valgrind のヒープ プロファイラ ツールは「massif」と呼ばれます。
Massif はヒープ プロファイラーです。プログラムのヒープのスナップショットを定期的に取得することで、詳細なヒープ プロファイリングを実行します。時間の経過に伴うヒープ使用状況を示すグラフを生成します。これには、プログラムのどの部分が最も多くのメモリ割り当てを行っているかに関する情報が含まれます。グラフには、最も多くのメモリが割り当てられている場所を特定するための詳細情報を含むテキスト ファイルまたは HTML ファイルが追加されます。Massif は、通常の約 20 倍の速度でプログラムを実行します。
で説明したように、Valgrind ドキュメントプログラムを Valgrind 経由で実行する必要があります。
valgrind --tool=massif <executable> <arguments>
Massifはメモリ使用量のスナップショット(例)のダンプを書き込みますmassif.out.12345
。これらは、(1)メモリ使用量のタイムライン、(2)各スナップショットについて、プログラムメモリが割り当てられた場所の記録を提供します。これらのファイルを分析するための優れたグラフィカルツールは、massif-visualizerms_print
しかし、Valgrind に同梱されているシンプルなテキストベースのツールである がすでに非常に役立っていることがわかりました。
メモリ リークを見つけるには、memcheck
valgrind の (デフォルトの) ツールを使用します。
私が試していない新しいツールはヒープトラックそしてそのgperftools のヒーププロファイラー。