求解为啥 docker 总是 out of memory

280 天前
 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 都能跑起来,占用也不高,怎么就经常杀进程呢?百思不得其解

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

这应该不是 docker 的问题。

sysctl -a | grep overcommit_memory

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

考虑临时设置为 overcommit_memory = 1 看看,我猜大概率是可以运行起来的。但是保持,永远的设置为 1 需要一定的 linux 专业知识,简称,你真的知道你在干嘛。
Hieroglyph
280 天前
3 楼正解,可以关注一下内核的一些内存限制参数
ala2008
280 天前
有没有配置限制内存之类的
sasaba
280 天前
docker 计算内存用量的时候似乎会算上 buff cache ,如果写了太多文件可能是这个原因
aru
280 天前
先加上 4G 的 swap ,再观察下
有些进程会申请很大的内存
aogg
280 天前
docker stats 查看内存变化
31415926535x
280 天前
可能是因为其他服务申请的内存较多且存在超卖逻辑而崩掉了,看看宿主机是不是也有啥服务呢,
如果不是那么重要的应用,加自动重启吧
DefoliationM
280 天前
zswap 开一开,swap 加一加
mingtdlb
280 天前
是不是你容器的问题,docker 一般不会有问题。你 run 容器的时候限制一下 内存 试试
blessingcr
279 天前
之前试过各种中间件 oom ,大概都是 docker 容器内的某些服务,他没限制 xmx,MetaspaceSize ,MetaspaceSize 之类的最大内存; 然后有的服务他不到最大内存不 rc ; 服务内存+容器内系统内存> 容器内存就 oom 了;
试试加点内存或者限制下内存
blessingcr
279 天前
docker 本身真的没问题 嘎嘎好用
RobberPhex
278 天前
看了上面的回答,我觉得解决问题是 ok 的,但是我们还是要有一些方法论的。

比如见到 oom ,我们应该看一下 dmesg 等 oom 日志,看下为什么 oom-kill ,是 cgroup 限制了,还是 kernel 限制了,是否需要 overcommit 等。

开 overcommit_memory 、加 swap 等,只能说是缓解问题,但不能算是解决了问题。
y1y1
276 天前
alist 不是用的 xiaoya 吧?之前有过爆内存的情况

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

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

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

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

© 2021 V2EX