Linux 非アクティブメモリ

Linux 非アクティブメモリ

vmstat -sLinuxシステムでコマンドを実行したときに得られる統計は次のとおりです。

$ vmstat -s
16305800  total memory
16217112  used memory
9117400  active memory
6689116  inactive memory
88688  free memory
151280  buffer memory

このコマンドで表示される詳細の一部をスキップしました。

私は用語を理解しています。アクティブメモリは、特定のプロセスで使用されるメモリです。非アクティブメモリは、実行されなくなったプロセスに割り当てられたメモリです。

気になりました。非アクティブメモリが割り当てられたプロセスをインポートする方法はありますか?toporvmstatコマンドは、まだ使用されているメモリをアクティブメモリと非アクティブメモリの合計として表示し、アクティブメモリを使用するプロセスのみを表示できるため、どのプロセスが非アクティブメモリを使用しているかはまだ私に質問です。

ベストアンサー1

場合によっては、非アクティブメモリを見てみるのは面白いかもしれません。たとえば、非アクティブメモリに対するアクティブメモリの高い割合はメモリ不足を示す可能性がありますが、これは一般的に理解し、観察しやすいページング/スワッピングを伴います。別のシナリオは、時間が経つにつれてアクティブメモリが増えたり、ギザギザになったりするのを見ることです。これは、非効率的なソフトウェアに関する早期警告を提供する可能性があります(O(n)この時点でタイプの動作とパフォーマンスの低下を示す素朴なソフトウェア実装でこれを見たことがあります)。

このファイルには/proc/kpageflags各物理メモリページの64ビットビットマップが含まれており、プログラムを介して要約を取得できます。page-typesおそらくカーネルと一緒に提供されます。

あなたの理解ポジティブそして非アクティブしかし、それは間違っています

  • アクティブな記憶「最近」訪問したページです
  • 非アクティブメモリ「最近」訪問したことのないページです。

「最近」は時間の絶対的な尺度ではなく、活動と記憶力によって異なります。 (無料の本からいくつかの技術的な詳細を読むことができます。)Linux仮想メモリマネージャについて第10章ここに関連)またはカーネル文書(ページマッピング.txt)。

各リストはLRU(やや)として保存されます。非アクティブメモリーページは、前提条件(空きメモリーページが必要になる前)または空きメモリーが構成された制限よりも低く、すぐに空きページが必要になると予想される場合は、スワップファイルへの書き込みに最適な候補です。

2つのフラグのうちの1つは実行中のプロセスに割り当てられたページに適用され、プロセスが終了すると永続メモリまたは共有メモリを除くすべてのメモリが解放され、それ以外の場合はエラーとして処理されます。

この低レベルのページタグ付けにはPIDに関する知識は必要ないため(いかなる場合でもメモリページに複数のマッピングされたPIDがある可能性があるため)、要求されたデータを提供するために必要な情報は1つありません。

プロセスごとにこれを行うには、仮想アドレス範囲を抽出して物理ページ(/prod/PID/mapsPFN)に変換して/proc/PID/pagemapインデックスを作成する必要があります/proc/kpageflags。これらの内容はpagemap.txtすべてC言語で約60〜80行かかります。 VMシステムの問題を解決しない限り、この数値はそれほど面白くありません。あなたができることの1つは、各プロセスの非アクティブページとスワップサポートページを計算することです。この数字は、仮想マシンサイズ(VSZ)と比較してRSS(常駐)サイズが低いプロセスを表します。別の方法はメモリリークを推論することですが、その作業のためのより良いツールがあります。

おすすめ記事