首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记忆中的Anon页面是什么?

记忆中的Anon页面是什么?
EN

Unix & Linux用户
提问于 2021-11-11 05:50:48
回答 1查看 4.4K关注 0票数 1

最近,我的一个the服务器消耗了更多的内存,然后我检查了/proc/meminfo,发现AnonPages几乎消耗了所有的内存。

我试着从一些文档中了解这一点,但还不清楚,有人能帮我什么是实际的吗,以及我如何修复它?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-11-11 08:56:31

来自proc(5)的手册页:

代码语言:javascript
复制
AnonPages %lu (since Linux 2.6.18)
       Non-file backed pages mapped into user-space page tables.

进程映射Linux中内存的方式通常是使用“将文件或设备映射到内存”的mmap(2)系统调用。内存可以由磁盘中的实际文件进行备份,因此您可以像处理常规内存块一样处理文件。

但是,您也可以分配没有任何文件支持的空内存部分。这些内存页被称为“匿名”。来自mmap的手册页:

代码语言:javascript
复制
MAP_ANONYMOUS
       The mapping is not backed by any file; its contents are initialized to zero.

如果您曾经用C编写过程序,那么您可能熟悉malloc(3),并使用它分配动态内存。在Linux中,在大多数情况下,malloc实际上会调用mmap来分配匿名内存页。

AnonPages显示了进程使用的最常见的内存类型--动态内存区域。

请注意,使用mmapmalloc分配匿名页面并不一定会立即由AnonPages反映出来;当您分配动态内存时,您只会得到一个可以使用的虚拟地址空间,但是内存页实际上不会“实例化”并映射到进程的用户空间内存中,直到它开始使用它们(写入或读取内存)。只有这样,这些内存页才会被加载到内存中,并由AnonPages记帐。

简单地说,当您想到“内存”和"RAM“时,AnonPages代表了在默认情况下可能会出现的第一件事。只有“常规”内存页根据它们的请求动态地分配给进程,并由这些进程使用。真的没什么好“修”的。AnonPages是“顶级击球手”,这是预料中的,也是相当普遍的。

您应该只需查找占用内存最多的进程(例如,使用top)并相应地采取行动。也许有一个进程消耗了大量的内存(RSS),或者很多进程占用了内存。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/677006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档