【问题标题】:Rails application takes up all of the server memoryRails 应用程序占用了所有服务器内存
【发布时间】:2012-07-20 22:39:24
【问题描述】:

我在 ubuntu VPS(1GB RAM)上运行一个 rails 应用程序(Passenger 和 nginx 以及 mongodb 和 memcached)应用程序 - 从几天开始,我看到启动 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​​ 进程。 请就这两个问题分享一些想法。

【问题讨论】:

    标签: ruby-on-rails-3 memory-leaks nginx passenger


    【解决方案1】:

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

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

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多