1

使用 Sinatra 应用程序设置 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
4

2 回答 2

1

简介,简介,简介

您尚未确定应用程序中实际消耗内存的内容。因此,您的问题是未定义的,任何“解决方案”都相当于在寻找潜在答案时四处寻找。

潜在的答案

  1. 内存增长本质上不是问题,除非你真的用完了它。如果这没有发生,请不要理会它。
  2. mysql2 gem 有一些已知的内存问题。这可能适用于您的场景。
  3. 垃圾收集不会仅仅因为变量或文字超出范围而发生。有些情况会触发垃圾收集,但除非你真的受到内存限制,否则你不应该到处乱搞或修补你的垃圾收集器。
  4. 确保您了解Sinatra 中的范围,以便您知道对象何时应该超出范围。但是,仅仅因为对象超出范围并不意味着它们被垃圾收集,只是它们可以
于 2012-08-03T13:46:11.553 回答
0

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

return people.to_json # this exits the block
people = nil #this never gets called.
于 2012-08-03T12:57:11.257 回答