我的Rails 3.1.3应用程序占用了太多内存

时间:2012-04-18 02:38:40

标签: ruby-on-rails-3 memory-management ruby-on-rails-3.1

我的应用程序正在交换到磁盘,因为它使用的是2.2 GB的内存。我无法弄清楚我的应用程序中是什么导致它成为这样的内存耗尽。

这是一台RHEL5虚拟机,内存为2 GB。

Rails是版本3.1.3。

我的网络服务器在nginx v1.0.10中,使用Phusion Passenger版本3.0.11。

“红宝石”流程在内存占用方面似乎完全脱节。

该应用程序是一个相对简单的产品目录。当内存不足时,服务器每天大约崩溃两次。我也在使用memcached v1.4.4。

Rails缓存在最终无法建立更多内存时导致崩溃。

我不知道采取了哪些步骤来确定我的应用程序占用如此大的空间。

可能是:

1) Some gems being loaded into memory?
2) A faulty or insufficient Passenger setup in my nginx.conf file?
3) Something else?

我非常感谢任何人都可以提供帮助!我必须每两个小时检查一下这个东西。不好玩!

更新:

乘客配置如下:

server {
  listen 80;
  client_max_body_size 4M;
  server_name www.myapp.net myapp.net *.myapp.net;
  root /usr/code/mcp5/public;   # <--- be sure to point to 'public'!
  passenger_enabled on;
  passenger_min_instances             5;
  rails_env                           production;
  rails_framework_spawner_idle_time   0;
  rails_app_spawner_idle_time         0;
}

我还注意到在我的日志记录实用程序中,这个东西很快就会超过20个ruby过程。

2 个答案:

答案 0 :(得分:1)

您的乘客配置如何?您可能拥有太多线程来获取可用资源。

感谢您的更新。

虽然我们的服务器拥有的资源比您的多,但我们仍然使用以下指令。

  
    

PassengerMaxPoolSize

  

尝试将其设置为10以开始并执行负载测试。这应该至少阻止应用程序杀死您的服务器。然后我会花更多的时间来确定瓶颈在哪里。我们使用Newrelic进行性能监控。这有助于

答案 1 :(得分:1)

如果您无法使用NewRelic或没有资金用于专业计划,您可以尝试以下方法来查明乘客的问题:

sudo /usr/local/bin/passenger-status

查看属于哪个站点的流程和数量 - 如果从一台计算机上提供多个站点非常有用

sudo /usr/local/bin/passenger-memory-stats

查看所涉及的所有进程的详细内存信息 服务(apache + passenger + ruby​​)。

还可以使用munin设置传统监控。有几个howtos用于监控乘客与munin