3

I am running a rails app (Passenger and nginx with mongodb and memcached) app on a ubuntu VPS (1GB RAM)- from a couple of days, I see that after starting nginx, ruby process slowly takes up all the memory of the box even though there are no requests on the server. new_relic shows the following enter image description here

top Output

top - 12:02:23 up  2:47,  1 user,  load average: 0.03, 0.02, 0.00
Tasks:  16 total,   1 running,  15 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1048576k total,  1048576k used,        0k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

9993 mongodb   18   0  128m  29m  21m S    0  2.9   0:17.06 mongod                                                                                      
1135 nobody    18   0 71664  18m  856 S    0  1.8   0:00.55 memcached                              
14310 passenge  15   0  500m 434m 4660 S    0 42.5   0:13.59 ruby
15496 passenge  15   0  425m 360m 4648 S    0 35.3   0:13.06 ruby   

I think there is some code leaking memory - or I need to somehow kill costly ruby processes on passenger whenever they reach some threshold. Please share some thoughts on both these issues.

4

1 回答 1

0

很难回答,因为没有太多信息可以继续,所以我会相当笼统地回答这个问题。显示内存使用量随时间变化的图表或显示响应时间下降的图表会很有帮助。

无论如何,我有一个类似的设置(Rails/Passenger/Nginx/MongoDB/VPS-1GB)。

  • 首先通过检查日志以确认没有请求来确认您假设没有请求(并确保在 Nginx 中打开了足够的日志记录)

  • 尝试禁用 New Relic(因为随着时间的推移,这会影响到他们的服务器)并查看您拥有的任何其他监控软件(例如 Nagios)。

  • 尝试一个免费的负载测试应用程序(例如http://loadimpact.com)并在主动负载测试时观察内存/GC 和处理器图表。如果您看到内存使用量逐渐上升并超过了健康的数量,您可以打赌您在某个地方存在内存泄漏。

如果你发现你这样做了,这实际上只是消除变量的问题——我会在 Nginx 上暂停 Rails,但你可以在没有前端的情况下运行 Rails,或者关闭乘客并点击 Nginx 中的所有静态资产来尝试找到原因。

希望这可以帮助。

于 2013-08-19T08:04:12.890 回答