vmstat -s
Linuxシステムでコマンドを実行したときに得られる統計は次のとおりです。
$ vmstat -s
16305800 total memory
16217112 used memory
9117400 active memory
6689116 inactive memory
88688 free memory
151280 buffer memory
このコマンドで表示される詳細の一部をスキップしました。
私は用語を理解しています。アクティブメモリは、特定のプロセスで使用されるメモリです。非アクティブメモリは、実行されなくなったプロセスに割り当てられたメモリです。
気になりました。非アクティブメモリが割り当てられたプロセスをインポートする方法はありますか?top
orvmstat
コマンドは、まだ使用されているメモリをアクティブメモリと非アクティブメモリの合計として表示し、アクティブメモリを使用するプロセスのみを表示できるため、どのプロセスが非アクティブメモリを使用しているかはまだ私に質問です。
答え1
場合によっては、非アクティブメモリを見てみるのは面白いかもしれません。たとえば、非アクティブメモリに対するアクティブメモリの高い割合はメモリ不足を示す可能性がありますが、これは一般的に理解し、観察しやすいページング/スワッピングを伴います。別のシナリオは、時間が経つにつれてアクティブメモリが増えたり、ギザギザになったりするのを見ることです。これは、非効率的なソフトウェアに関する早期警告を提供する可能性があります(O(n)
この時点でタイプの動作とパフォーマンスの低下を示す素朴なソフトウェア実装でこれを見たことがあります)。
このファイルには/proc/kpageflags
各物理メモリページの64ビットビットマップが含まれており、プログラムを介して要約を取得できます。page-types
おそらくカーネルと一緒に提供されます。
あなたの理解ポジティブそして非アクティブしかし、それは間違っています
- アクティブな記憶「最近」訪問したページです
- 非アクティブメモリ「最近」訪問したことのないページです。
「最近」は時間の絶対的な尺度ではなく、活動と記憶力によって異なります。 (無料の本からいくつかの技術的な詳細を読むことができます。)Linux仮想メモリマネージャについて、第10章ここに関連)またはカーネル文書(ページマッピング.txt)。
各リストはLRU(やや)として保存されます。非アクティブメモリーページは、前提条件(空きメモリーページが必要になる前)または空きメモリーが構成された制限よりも低く、すぐに空きページが必要になると予想される場合は、スワップファイルへの書き込みに最適な候補です。
2つのフラグのうちの1つは実行中のプロセスに割り当てられたページに適用され、プロセスが終了すると永続メモリまたは共有メモリを除くすべてのメモリが解放され、それ以外の場合はエラーとして処理されます。
この低レベルのページタグ付けにはPIDに関する知識は必要ないため(いかなる場合でもメモリページに複数のマッピングされたPIDがある可能性があるため)、要求されたデータを提供するために必要な情報は1つありません。
プロセスごとにこれを行うには、仮想アドレス範囲を抽出して物理ページ(/prod/PID/maps
PFN)に変換して/proc/PID/pagemap
インデックスを作成する必要があります/proc/kpageflags
。これらの内容はpagemap.txt
すべてC言語で約60〜80行かかります。 VMシステムの問題を解決しない限り、この数値はそれほど面白くありません。あなたができることの1つは、各プロセスの非アクティブページとスワップサポートページを計算することです。この数字は、仮想マシンサイズ(VSZ)と比較してRSS(常駐)サイズが低いプロセスを表します。別の方法はメモリリークを推論することですが、その作業のためのより良いツールがあります。
答え2
外部プログラムにはまったく意味のないツールはありません。
システムでこれを知る必要がある唯一のものはカーネルのメモリハンドラです。カーネルのメモリハンドラはそれを使用して、利用可能なメモリが使い果たされたときにページアウト(スワップ)する項目を特定します。
懸念を引き起こす唯一の関連状況は、交換がほとんどいっぱいの場合です。このような場合は増やしてください。
非アクティブメモリを調べる必要がある実際の問題を見たことはありません。