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
直接引用を参照してください。
(malloc(3)または同様の方法を使用して)1 GBのメモリを割り当てたが、そのメモリのうち300 MBだけに触れるプロセスは、合計1 GBのアドレス空間を割り当てたにもかかわらず、300 MBのメモリしか使用しないようです。この1GBはVMの「コミットされた」メモリであり、割り当てアプリケーションで使用する準備ができています。
Committed_AS
システムが動的メモリ割り当てに要求された合計メモリ量を示します。これは、非アクティブメモリ(ヒープにない)が計算されないことを意味します。ここでは仮想メモリが動作します。プロセスは要求されたすべてのメモリを持っていると思うが、実際には必要なメモリしか持っていません。
これも直接関連しています。overcommit_memory
sysctl
サーバーがメモリの「過剰割り当て」を防ぐために使用できる構成設定。OOM一度にすべての「コミットされた」メモリが必要な場合は、それ自体で実行されます。