最近,我的一个the服务器消耗了更多的内存,然后我检查了/proc/meminfo,发现AnonPages几乎消耗了所有的内存。
我试着从一些文档中了解这一点,但还不清楚,有人能帮我什么是实际的吗,以及我如何修复它?
发布于 2021-11-11 08:56:31
来自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),并使用它分配动态内存。在Linux中,在大多数情况下,malloc实际上会调用mmap来分配匿名内存页。
AnonPages显示了进程使用的最常见的内存类型--动态内存区域。
请注意,使用mmap或malloc分配匿名页面并不一定会立即由AnonPages反映出来;当您分配动态内存时,您只会得到一个可以使用的虚拟地址空间,但是内存页实际上不会“实例化”并映射到进程的用户空间内存中,直到它开始使用它们(写入或读取内存)。只有这样,这些内存页才会被加载到内存中,并由AnonPages记帐。
简单地说,当您想到“内存”和"RAM“时,AnonPages代表了在默认情况下可能会出现的第一件事。只有“常规”内存页根据它们的请求动态地分配给进程,并由这些进程使用。真的没什么好“修”的。AnonPages是“顶级击球手”,这是预料中的,也是相当普遍的。
您应该只需查找占用内存最多的进程(例如,使用top)并相应地采取行动。也许有一个进程消耗了大量的内存(RSS),或者很多进程占用了内存。
https://unix.stackexchange.com/questions/677006
复制相似问题