求解为啥 docker 总是 out of memory

8 小时 11 分钟前
 zjyg1993
机器内存是 4G ,目前开了 5 个容器,分别是 alist 、navidrome 、homeassistant 、lucky 、iptv ,

目前内存使用情况:已用 882M ,缓存 1.4G ,可用 1.9G ,docker 版本:20.10.25

但是经常会发现某些容器自己会停掉,但是 cpu 和内存也没怎么占用,再开一些空间 200M 左右的应用(比如 music_tag_web ),就会无法启动,或者已经运行的容器就会停止,然后跑 docker 就提示 fatal error: out of memory allocating heap arena map 。

但是 HA 都能跑起来,占用也不高,怎么就经常杀进程呢?百思不得其解

求懂的老哥解答一二。
1363 次点击
所在节点    NAS
8 条回复
rockxsj
8 小时 1 分钟前
插嘴问一句,iptv 是哪个服务?🤔
zjyg1993
7 小时 36 分钟前
@rockxsj hub-docker 上有一个叫做 allinone 的项目,可以生成 m3u 的文件,导入到电视机,或者播放器,就可以看高清电视
Emiya1208
7 小时 28 分钟前
你提供的信息非常有限,且服务器不在我手上无法 debug ,仅凭借现有信息做如下推断:

这应该不是 docker 的问题。

sysctl -a | grep overcommit_memory

检查这个,我猜应该是 0 ,当设置为 0 时,系统会基于一个启发式算法来决定是否允许分配。这个算法考虑的因素包括当前可用内存、swap 空间等。或许你的程序运行起来只需要 1MB 内存(极端假设),但是它申请了 2G (它为自己未来可能用到的内存进行申请,尽管这并不会直接使用 2G ),那么会直接 oom 。

考虑临时设置为 overcommit_memory = 1 看看,我猜大概率是可以运行起来的。但是保持,永远的设置为 1 需要一定的 linux 专业知识,简称,你真的知道你在干嘛。
Hieroglyph
7 小时 24 分钟前
3 楼正解,可以关注一下内核的一些内存限制参数
ala2008
7 小时 20 分钟前
有没有配置限制内存之类的
sasaba
7 小时 19 分钟前
docker 计算内存用量的时候似乎会算上 buff cache ,如果写了太多文件可能是这个原因
aru
4 小时 30 分钟前
先加上 4G 的 swap ,再观察下
有些进程会申请很大的内存
aogg
2 小时 17 分钟前
docker stats 查看内存变化

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1096894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX