Rails Puma worker 有内存回收/重启机制吗?

tomanderson · 2021年06月01日 · 最后由 lyfi2003 回复于 2021年06月03日 · 672 次阅读

发现 puma 开单进程跑 rails,内存占用似乎只涨不跌。启动时内存 300m,过几天将近 2g,但是从来没有发现内存下降的情况。

看到这个帖子(https://ruby-china.org/topics/24479)的回复中有人说:

“细心观察 workers 进程在一定时间就会变动,相当于重启内存回收。”

但是我在测试环境下开了 workers,等了十几分钟不动,好像 workers 进程和内存占用没有任何变化……

想问下用过的同学,“workers 会自动重启/回收内存”,是真的吗?具体是什么机制呢?

内存占用似乎只涨不跌。启动时内存 300m,过几天将近 2g,但是从来没有发现内存下降

大概率是内存泄漏,慢慢排查吧

会自动重启么?好像得加 worker skiller 的 gem 配置一下才会根据某些条件重启,比如超过 2g

ps 先换成 jemalloc 试试

随着启动时间越来越长,内存不断增长,但如果慢慢稳定到一个定值的话,可能要怀疑内存碎片的问题,Ruby 2.7 开始引入 GC.compact 来回收碎片,但是代价非常大,会暂停好几秒业务,只能在没有业务的时候手动触发。如果每天都在线性增长的话,应该是 memory leak 了,需要排查程序中的 bug。万不得已,workers killer 定时重启。

会暂停好几秒业务

这个太恐怖了

Awlter1 回复

考虑过自动重启,但是怕会不会某个 worker 运行到一半突然被自动重启了,那业务数据是不是会丢啊

dsh0416 回复

观察下来应该是逐渐趋近于一个稳定值。到时试试 GC.compact 有没有效果

tomanderson 回复

大哥看文档啊

tomanderson 回复

https://ruby-china.org/topics/35236 看看这里,大概率是自己的代码有些问题

需要 登录 后方可回复, 如果你还没有账号请 注册新账号