我无法弄清楚为什么我的Rails应用程序(托管在Heroku(雪松)上)不断分配越来越多的内存.如果我不知道更好,我会说这是Ruby/Rails中的内存泄漏,但由于我是Ruby/Rails的新手,我觉得我错过了一些完全明显的东西.
我正在使用由生成的Rails默认值rails new,以及完全最新的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
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的newrelic配置.我有零模型和一个控制器nothing_controller.rb,它是使用rails generate controller nothing以下生成的:
class NothingController < ApplicationController
def index
end
end
Run Code Online (Sandbox Code Playgroud)
我删除public/index.html并添加了一个空views/nothing/index.html.erb.我对生成的应用程序做的唯一其他事情是添加一个路由routes.rb:
Nothing::Application.routes.draw do
root :to => "nothing#index"
end
Run Code Online (Sandbox Code Playgroud)
我承诺,把它推到Heroku,然后写了一个快速的脚本,每隔10秒加载我的Heroku页面.这就是我的New Relic报道的内容: …
我试着用Rails解决内存泄漏问题.我可以通过New Relic看到内存的使用量在增加而不会减少.
这是一个来自大线程(Rails应用程序内存不断增加)的衍生问题,我在解决问题时遇到了麻烦.我现在需要知道的只是:
Rails内存泄漏的主要原因/因素是什么?
据我所理解:
全局变量(例如@@ variable) - 我没有这些变量
符号(我没有特别创建)
会议 - 在这里应该避免什么?假设我有一个会话,跟踪一个特定用户在文本搜索网站时使用的最后一个查询.我该怎么杀掉它?
"留下参考资料" - 这究竟意味着什么?你举个例子吗?
您可以提供的任何其他错误的编码示例通常会造成内存泄漏?
我想用这些信息来查看我的代码,所以请提供示例!
最后,这会是"内存泄漏代码"吗?
ProductController
...
@last_products << Product.order("ASC").limit(5)
end
Run Code Online (Sandbox Code Playgroud)
这会让@last_products膨胀吗?