部署 Rails Server 内存随着访问量不断增加,但是当访问量降下来的时候,内存并没有释放。

tangmonk · 2015年08月19日 · 最后由 tangmonk 回复于 2015年08月24日 · 2667 次阅读

我用 ab 测试 Puma 和 Thin, 用 htop 看着内存不断的涨。但是当服务器空闲下来,内存还是那个状态,只增加不减少。

Passenger 我也测试过,它的模式应该是一个 process 的内存到达一定限制的时候,新开一个 process 出来,当这个 process 空闲的时候,再把它 kill 掉。

内存泄露了,检查程序,使用的 Gem

Ruby China 的线上服务连续跑了 6 天,内存一直稳定在 210m 左右一个进程

#1 楼 @huacnlee 请问 Ruby China 在不访问的初始状态每个进程占用大概多少内存,刚开始的时候使用内存应该会稳定上升,到一定程度后稳定下来。还有 ruby 的东西感觉确实很吃内存,unicorn 也是如此...

启动起来 170m, 然后稳定在 210m 左右,这是正常的,因为有运行时的常量创建。 不要感觉,那都是代码的问题。

#1 楼 @huacnlee

我在本地 rails new 一个新的 project, sqlite 数据库, 数据库放入 50 条测试数据.

然后用 ab 测试,内存依然还是只增加不减少。

#5 楼 @tangmonk 什么版本 Ruby, Rails 内存跑到多少了

#6 楼 @huacnlee

不好意思,我又测试了下:

rails server 在之前高并发下分配的内存,并不会释放掉,而是继续留着。 下次如果同样级别的并发情况下,内存基本上不会增加(利用之前分配的内存)。 但是如果并发级别增高的话,又会分配新的内存。

所以我测试 test project 的时候,并发级别不变的情况下,多次测试内存都会稳定在一个值左右。我的实际项目也是。

所以是不是应该根据服务器内存来限制 server 的 connection 数量,免得服务器 down 掉?

#6 楼 @tangmonk

ruby 版本是 ruby 2.1.6p336

内存是一个 process 跑到初始的内存是 100 多 M, 如果并发级别是 20 的话,服务器内存就会增加到 600M。。。

我仅仅测试的是首页,只有 7-8 个 sql 查询。。太吃内存了。。

也不清楚是不是 Gem 的问题,我要慢慢查查。

找到原因了,我用 rails 来 server static file 的原因。。

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