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

Linux –常駐セットサイズ/仮想サイズについての説明が必要ですか?

pidstatが見つかりました プロセスを監視するための優れたツールになります。特定のプロセスの平均メモリ使用量を計算したいと思います。出力例を次に示します。

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(これはpidstat -r -p 7276からの出力の一部です 。)

常駐セットサイズ(RSS)または仮想サイズ(VSZ)の情報を使用して、平均メモリ消費量を計算する必要がありますか?ウィキペディアとフォーラムでいくつか読んだことがありますが、違いを完全に理解することはできません。さらに、それらのどれも信頼できないようです。では、プロセスを監視してメモリ使用量を取得するにはどうすればよいですか?

この問題に関するヘルプがあれば役に立ちます。

承認された回答:

RSSは、このプロセスが現在メインメモリ(RAM)に持っているメモリの量です。 VSZは、プロセスが合計で持つ仮想メモリの量です。これには、RAM内とスワップアウトされた両方のすべてのタイプのメモリが含まれます。これらの数値には、共有ライブラリや他の種類のメモリも含まれているため、偏る可能性があります。 bashのインスタンスを500個持つことができます 実行中であり、メモリフットプリントの合計サイズは、RSS値またはVSZ値の合計にはなりません。

プロセスのメモリフットプリントについてより詳細なアイデアを得る必要がある場合は、いくつかのオプションがあります。 /proc/$PID/mapを確認できます 嫌いなものを取り除きます。共有ライブラリの場合、ニーズによっては計算が複雑になる可能性があります(覚えていると思います)。

プロセスのヒープサイズのみを気にする場合は、いつでも[heap]を解析できます。 mapのエントリ ファイル。カーネルがプロセスヒープに割り当てたサイズは、プロセスが要求した正確なバイト数を反映している場合と反映していない場合があります。 割り当てられます。これを捨てることができる詳細、カーネル内部および最適化があります。理想的な世界では、プロセスが必要とするだけの量になり、システムのページサイズの最も近い倍数に切り上げられます(getconf PAGESIZE それが何であるかを教えてくれます— PCでは、おそらく4,096バイトです。

プロセスに割り当てられているメモリの量を確認したい場合は、 、最良の方法の1つは、カーネル側のメトリックを放棄することです。代わりに、Cライブラリのヒープメモリ(割り当て解除)関数をLD_PRELOADでインストルメントします。 機構。個人的には、valgrindを少し乱用しています この種のことについての情報を得るために。 (インストルメンテーションを適用するには、プロセスを再起動する必要があることに注意してください。)

関連:Linux –誤って/ rootフォルダーを削除しましたが、シェル文字列が異なります。何が得られますか?

ランタイムのベンチマークも行っている可能性があるため、valgrindに注意してください。 プログラムが少し遅くなります(ただし、おそらく許容範囲内です)。


Linux
  1. Linuxコマンド:vmstatを使用した仮想メモリの探索

  2. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  3. Linux – Linuxでプロセスのプロセッサ親和性を設定するにはどうすればよいですか?

  1. Linux で設定されたサイズにウィンドウのサイズを変更する

  2. Linux のプロセスあたりの最大スレッド数は?

  3. Linux/Unix プロセスのピーク時のメモリ使用量

  1. C での現在のプロセスのメモリ使用量

  2. Linux でプロセスのヒープ サイズを確認する方法

  3. 常駐セットサイズ/仮想サイズについて説明が必要