小编tri*_*web的帖子

当内存需求上升时,Linux 不会释放大磁盘缓存

在 2.6.31-302 x86-64 内核上运行 Ubuntu。总体问题是我在“缓存”类别中的内存不断增加,即使我们的应用程序需要它也不会被释放或使用。

所以这就是我从“免费”命令中得到的。乍一看,这些都没有异常。

# free
             total       used       free     shared    buffers     cached
Mem:       7358492    5750320    1608172          0       7848    1443820
-/+ buffers/cache:    4298652    3059840
Swap:            0          0          0
Run Code Online (Sandbox Code Playgroud)

有人会说的第一件事是“别担心,Linux 会自动管理该内存。” 是的,我知道内存管理器应该如何工作;问题是它没有做正确的事情。此处“缓存”的 1.4 GB 似乎已保留且无法使用。

我对 Linux 的了解告诉我 3 GB 是“免费的”;但系统的行为则不然。当 1.6 GB 的实际空闲内存在使用高峰期用完时,一旦需要更多内存(并且第一列中的“空闲”接近 0),就会调用 OOM 杀手,进程被杀死,并且问题开始出现即使-/+ 缓冲区/缓存行中的“空闲”仍然有大约 1.4 GB 的“空闲”。

我已经调整了关键进程的 oom_adj 值,所以它不会使系统陷入困境,但即使如此,重要的进程也会被杀死,我们永远不想达到那个点。特别是当理论上 1.4GB 仍然是“免费的”时,如果它只会驱逐磁盘缓存。

有谁知道这里发生了什么?互联网上充斥着关于 Linux 'free' 命令和“为什么我没有任何可用内存”的愚蠢问题,因此我找不到关于这个问题的任何信息。

我脑海中浮现的第一件事是交换已关闭。我们有一个坚定不移的系统管理员;如果他们得到支持,我愿意接受解释。这会导致问题吗?

运行后这里是免费的echo 3 > /proc/sys/vm/drop_caches

# free
             total       used       free     shared    buffers     cached
Mem:       7358492    5731688 …
Run Code Online (Sandbox Code Playgroud)

linux memory disk-cache memory-usage

25
推荐指数
1
解决办法
4万
查看次数

标签 统计

disk-cache ×1

linux ×1

memory ×1

memory-usage ×1