因此,我正在运行一个在日志中显示以下内容的容器:
警告 overcommit_memory 设置为 0!内存不足时后台保存可能会失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到 /etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使此操作生效。
我一生中的大部分时间都在使用 Windows,而对 Linux 则大约 80% 一无所知,据我所知,设置此设置时,它会在整个系统范围内进行,这也会影响所有其他容器。我要这样做吗?
有没有办法只为推荐它的容器设置这个?我应该补充一点,以防有帮助,我在 WSL2 模式下运行 docker 桌面。
更新:根据他在评论中的要求,我添加了与该问题相关的容器;它被称为 Papermerge。
答案1
是否有某种方法可以仅为推荐它的容器设置此功能?
否vm.overcommit_memory
Linux 内核可调,在主机级别,而不是容器级别。值 0 比 1 表示更谨慎的过量使用。
Redis 推荐 1 的理由是他们的后台保存机制。内存较大的数据库进程会自行分叉以保存副本,突然 Linux 猜测它可能需要多达两倍的内存,因此不允许分叉。这对于 Redis 来说并不理想,因为它不会更改内存,只需要在写入时复制快照。
成功意味着容器在内存指标方面表现良好,并且进程不会因内存不足而死亡或无法分叉。即使您将其设置为 1,也不太可能,但容量规划是您作为系统管理员的任务。
答案2
您需要做的是为 redis 设置特权模式,然后在控制台中运行 sysctl vm.overcommit_memory=1,然后关闭特权模式。我花了比我应该花的更多的时间输入我在谷歌上搜索有关此事后找到的各种解决方案,这是唯一能够改变这个该死的变量的方法。