非アクティブ メモリは、コミット済みだが未使用のメモリに関連していますか?

非アクティブ メモリは、コミット済みだが未使用のメモリに関連していますか?

からLinux procfs ドキュメント:

      Active: Memory that has been used more recently and usually not reclaimed unless
              absolutely necessary.
    Inactive: Memory which has been less recently used. It is more eligible to be
              reclaimed for other purposes
Committed_AS: The amount of memory presently allocated on the system. The committed 
              memory is a sum of all of the memory which has been allocated by 
              processes, even if it has not been "used" by them as of yet. (...)

私の質問は、Commited_AS メモリと、実際に使用されている/使用されていないメモリの部分に関するものです。アクティブ メモリは、コミットされたメモリのうち実際に使用されている部分であると理解しています。ただし、非アクティブ メモリの場合はどうなるかわかりません。最近使用されていないメモリとは別に、コミットされているが未使用のメモリも含まれますか?

答え1

非アクティブ メモリとは、プロセスが以前使用し、割り当てられているものの、最近使用されていないメモリです。これは、新たに必要になったブロックのためのスペースを確保するためにページ アウトされる可能性が最も高いメモリです。

コミットされたメモリは、プロセスに名目上割り当てられているすべてのスペースの合計です。これは、プロセスが使用可能であると信じているすべてのメモリ スペースの合計であり、アクティブ (RAM にあり、最近使用された)、非アクティブ (RAM にあり、ある時点で使用されたが、最近使用されていないためページングの対象)、ページ アウト (RAM で一度使用され、スワップにページ アウトされた後)、未使用 (malloc() によって返されたが、まだアクセスされていないスペース) が含まれます。

答え2

man proc直接引用するには、 を参照してください。

1GB のメモリを割り当てたプロセス (malloc(3) または同様のものを使用) のうち、そのメモリの 300MB のみにアクセスするプロセスは、1GB 全体に割り当てられたアドレス空間を持っていても、300MB のメモリのみを使用していると表示されます。この 1GB は VM によって「コミット」されたメモリであり、割り当てアプリケーションによっていつでも使用できます。

Committed_AS動的メモリ割り当てのためにシステムで要求されるメモリの総量を指します。つまり、非アクティブなメモリ (ヒープ内にない) はカウントされません。ここで仮想メモリの威力が発揮されます。プロセスは要求したすべてのメモリを持っていると「考え」ますが、実際には必要なメモリしか持っていません。

これはまた、overcommit_memory sysctlメモリの「オーバーコミットメント」を防ぐために使用できる構成設定。これにより、サーバーがオームすべての「コミットされた」メモリが一度に必要になった場合に、それ自身で処理します。

関連情報