メモリの匿名ページとは何ですか?

メモリの匿名ページとは何ですか?

最近、私のWebサーバーの1つがより多くのメモリを消費していましたが、確認すると、/proc/meminfoAnonPagesがほぼすべてのメモリを消費していることがわかりました。

一部の文書ではこの問題を理解しようとしていますが、明確ではありません。誰かが正確に何であり、どのように解決するのに役立ちますか?

答え1

マニュアルページからproc(5)

AnonPages %lu (since Linux 2.6.18)
       Non-file backed pages mapped into user-space page tables.

Linuxでは、プロセスがメモリをマッピングする方法は、通常、mmap(2)「ファイルまたはデバイスをメモリにマッピングする」システムコールを使用することです。メモリはディスク上の物理ファイルとしてサポートされるため、通常のメモリブロックと同様にファイルを処理できます。

ただし、どのファイルでもサポートされていない空のメモリ部分を割り当てることもできます。これらのメモリページを「匿名」と呼びます。マニュアルページからmmap

MAP_ANONYMOUS
       The mapping is not backed by any file; its contents are initialized to zero.

Cでプログラムしたことがある場合は、おそらくmalloc(3)Cを使用して動的メモリを割り当てる方法に精通しています。 Linuxでは、ほとんどの場合、匿名メモリ割り当てページをmalloc実際に呼び出します。mmap

AnonPages最も一般的なメモリタイプ(プロセスで使用される動的メモリ領域)の使用量を示します。

mmap匿名ページの使用または割り当てがmalloc必ずしもすぐにAnonPages反映されるわけではありません。ダイナミックメモリを割り当てると、使用可能な仮想アドレス空間しか取得できませんが、メモリページは実際には「インスタンス化」されず、プロセスのユーザ空間メモリの使用を開始するまで(メモリからの書き込みまたは読み取り)プロセスのユーザ空間メモリへのマッピングではありません。次に、これらのメモリページがRAMにロードされ計算されますAnonPages

簡単に言えば、AnonPages「メモリ」と「RAM」を考えるとき、最初に思い浮かぶのはおそらく「メモリ」です。 「一般」メモリページは、要求に応じてプロセスに動的に割り当てられ、そのプロセスで使用されます。実際に「修正」する必要はありません。AnonPages「最高の打者」になることは予想され、一般的なことです。

最も多くのメモリを占めるプロセス(使用などtop)を見つけて、それに応じて行動する必要があります。多くのメモリ(RSS)を消費する1つのプロセスがある場合、またはメモリを埋める多くのプロセスがあります。

関連情報