如何从Sinatra App释放内存

时间:2012-08-02 17:34:11

标签: ruby activerecord sinatra

与Sinatra App建立api。

每个请求都是15MB。每次刷新页面时都会增加15MB的内存。如何在每次请求后清除信息?

require 'rubygems'
require 'sinatra'
require 'active_record'
require 'mysql2'
require 'json'

client = Mysql2::Client.new(adapter: 'mysql2', host: '127.0.0.1', database: 'dev_app', username: 'root', password: 'root')

get '/people' do
  q = "select name, age from people;"
  people = client.query(q, :as => :json).map{|one| {one['name'] => one['age'].to_i}}
  return people.to_json
  people = nil
end

2 个答案:

答案 0 :(得分:1)

个人资料,个人资料,个人资料

您还没有确定应用程序中实际消耗的内存。因此,您的问题是未定义的,任何“解决方案”都会在寻找潜在答案时挣扎。

潜在答案

  1. 内存增长本质上不是一个问题,除非你真的用光了。如果没有发生这种情况,请不要理会。
  2. mysql2 gem有一些已知的内存问题。这可能适用于您的方案。
  3. Garbage collection不会因为变量或文字超出范围而发生。有些条件会触发垃圾回收,但除非你真的受内存限制,否则你不应该随意使用它或修补你的垃圾收集器。
  4. 确保您了解scoping in Sinatra,以便了解对象何时应超出范围。但是,仅仅因为对象超出范围并不意味着他们被垃圾收集,只是他们可以

答案 1 :(得分:0)

不确定这是否重要,但我很确定你的'/ people'块的最后一行不会被调用,因为你有明确的回报

return people.to_json # this exits the block
people = nil #this never gets called.