我在ubuntu VPS(1GB RAM)上运行一个rails应用程序(带有mongodb和memcached的Passenger和nginx)应用程序 - 从几天开始,我看到在启动nginx之后,ruby进程慢慢占用了所有的内存即使服务器上没有请求,也可以使用该框。 new_relic显示以下内容
顶部输出
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
我认为有一些代码泄露了内存 - 或者我需要以某种方式在乘客达到某个阈值时以某种方式杀死昂贵的ruby进程。 请分享关于这两个问题的一些想法。
答案 0 :(得分:0)
很难回答,因为没有太多信息可以继续,所以我会相当一般地回答这个问题。显示内存使用情况的图表或显示响应时间降低的图表会很有帮助。
无论如何,我有一个类似的设置(Rails / Passenger / Nginx / MongoDB / VPS-1GB)。
首先通过检查日志来确认您没有请求,以确认没有请求(并确保在Nginx中打开日志已足够)
尝试禁用New Relic(随着时间的推移,这个心跳到他们的服务器),并查看您拥有的任何其他监控软件(例如Nagios)。
如果你发现了,那真的只是消除变量的问题 - 我会暂停Rails而不是Nginx,但是你可以在没有前端的情况下运行Rails,或者关闭乘客并且只需点击Nginx中的所有静态资产试图找到原因。
希望这有帮助。