GNU/Linux >> Linux の 問題 >  >> Linux

アプリケーションまたはプロセスの実際のメモリ使用量を測定するにはどうすればよいですか?

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>

Linux
  1. クラッシュしたアプリケーションからヒュージページを解放する方法

  2. ls で実際のハード リンクを確認するにはどうすればよいですか?

  3. 「ps -ef」を実行した場合、各プロセスのメモリ使用量を表示するにはどうすればよいですか?

  1. カーネル専用のメモリの使用状況を監視するには?

  2. Linux でプロセスのプロセッサ アフィニティを設定するにはどうすればよいですか?

  3. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?

  1. ClamAV のメモリ使用量を減らすには?

  2. 実行中のプロセスのウォールクロック時間を取得するにはどうすればよいですか?

  3. Linuxでアプリケーションによるメモリ使用量を制限するには?