内存在一个空的Rails应用程序中无限增长
我无法弄清楚为什么我的Rails应用程序(在Heroku(雪松)上托管)不断分配越来越多的内存。 如果我不知道更好,我会说这是Ruby / Rails中的内存泄漏,但由于我是Ruby / Rails的新手,我觉得我错过了一些完全明显的东西。
我正在使用rails new
生成的Rails默认值,以及完全最新的gem:
source 'https://rubygems.org' gem 'rails', '3.2.8' group :development do gem 'sqlite3' end group :assets do gem "sass-rails", "~> 3.2.5" gem "coffee-rails", "~> 3.2.2" gem "uglifier", "~> 1.3.0" end gem "jquery-rails", "~> 2.1.2" group :production do gem 'newrelic_rpm' gem "pg", "~> 0.14.1" end
我正在使用默认的newrelic配置 。 我有零模型和一个控制器, nothing_controller.rb
,它是使用rails generate controller nothing
:
class NothingController < ApplicationController def index end end
我删除了public/index.html
并添加了一个空的views/nothing/index.html.erb
。 我对生成的应用程序做的唯一其他事情是添加一个到routes.rb
的路由:
Nothing::Application.routes.draw do root :to => "nothing#index" end
我承诺,把它推到Heroku,然后写了一个快速的脚本,每隔10秒加载我的Heroku页面。 这就是我的New Relic报道的内容:
这里的所有都是它的。 内存只是不断增加,直到它通过Heroku的512MB限制。 这个应用程序中的代码与我在后面的教程中看到的代码几乎相同。 我不明白我做错了什么。
任何指导将不胜感激。
编辑(9/12):如果相关,我使用ruby 1.9。
代码我用来打服务器(C#):
using (var wc = new WebClient()) for (;; Thread.Sleep(10000)) wc.DownloadString("http://vast-earth-9859.herokuapp.com/");
编辑(9/13):尝试禁用New Relic并查看它是否仍然是R14s。
试图去除新的gem。 我在heroku上有同样的问题,罪魁祸首是newrelic gem。 您可以检查当前的内存对象。 下面的代码显示了对象计数。
ObjectSpace.each_object.with_object(Hash.new(0)){|obj, h| h[obj.class] +=1 }.select{|k,v| puts "#{k} => #{v}" if k == String || k == Array || k == Hash}
一旦内存超过(512 MB)heroku的限制,它将不会立即通过重新启动应用程序或更改代码来降低内存。 它将继续增长并进一步减速,heroku本身会在达到heroku的内存阈值(不确定它是多少)时杀死进程。
有许多事情可能导致内存泄漏,以下是少数1.连续exception抛出2.在单个请求中获取大量数据。
在本地计算机上测试它将无济于事,因为您的计算机上没有任何内存限制。
执行以下操作以查看heroku日志,并确定哪些项目需要时间的最新错误。
heroku logs -a -n
停止应用程序一天左右,然后您可以更改代码并启动应用程序。
- 在使用Action Cable(Puma端口侦听)的同时将Ruby on Rails应用程序部署到Heroku
- 如何确保我在Heroku上托管的Ruby on Rails应用程序更新了我的GitHub仓库中的最新代码?
- 上传到Heroku DB rake:迁移问题
- Cloud9,GitHub和Heroku(您要查找的页面不存在。)
- 无法在Heroku上部署Ruby on Rails应用程序?
- Ruby on Rails – 无法加载这样的文件 – mysql2 / 2.2 / mysql2(LoadError)
- 在Heroku部署之后做一些事情
- NoMethodError:未定义的方法`’为nil:NilClass推送到Heroku时
- 如何修复Authlogic Heroku无法注销生产中的问题?