为什么 drop_caches 会增加“可用”内存

为什么 drop_caches 会增加“可用”内存

我在管理的 proxmox 7 节点上遇到了内存不足的问题。在阅读有关类似问题的文章时,我被引导到 linuxatemyram.com,阅读此页面后,我开始监控“可用”内存而不是“已用”内存。但问题仍然存在(可用内存随着正常运行时间而减少)。

然后我发现我可以通过发出命令来强制释放Linux缓存echo 3 > /proc/sys/vm/drop_caches。我期望看到“已用”内存变为可用,但我没想到“可用”内存会增加,因为据我所知,可用内存也被视为已使用,因为它被Linux用于缓存。

但是 drop_caches 之后“可用”内存增加了,如下所示:

root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        29Gi       1.1Gi        67Mi       258Mi       977Mi
Swap:             0B          0B          0B
root@proxmox13:~$ echo 2 > /proc/sys/vm/drop_caches
root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        26Gi       4.1Gi        67Mi       205Mi       3.9Gi
Swap:             0B          0B          0B

为什么会增加?如果释放的内存用于缓存,为什么以前不认为可用?

感谢您的帮助。

答案1

从高层次来看,可用即免费缓存和其他易于回收的东西,以方便人类。https://www.linuxatemyram.com/尝试使用可用的计数器来解释发生了什么。对于排除空闲的各种缓存,还存在其他计数器。

事实上,Linux VMM 非常复杂且混乱。很少能通过简单的核算准确计算出内存使用量。我认为/proc/meminfo 中缓存的意思是页面缓存但你也放弃了dentry 和 inode。因此,free 中的 buff/cache 并没有发生很大变化。如果您需要详细研究内核对象,请尝试使用 slabtop。

从容量规划角度来看,32 GB 中可用的 1 GB 并不多。考虑减少每个 VM 主机的客户机数量,或增加物理内存。

不要使用/proc/sys/vm/drop_caches可能会因删除缓存和从磁盘重新读取数据而损害性能的选项。这适用于冷存储性能测试,因为人们懒得重新启动主机。

说到重启,程序不必泄漏内存即可缓慢减少可用内存。VM 主机和内部客户机可能正在运行数千个任务,其中一些任务保持运行并保留各种内存分配。您应该每隔几个月重新启动一次以进行软件更新,因此只要“泄漏”缓慢,可能就不值得详细调查。

提高你的内存监控能力,也可以看看压力失速信息。我真正关心的指标是任务是否由于内存不足而停滞,PSI 会跟踪这一点。

相关内容