加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何测量初始化时每个gem需要多少内存?

发布时间:2020-12-16 19:57:49 所属栏目:百科 来源:网络整理
导读:我有一个Rails 2.3.10应用程序与捆绑.在启动时,内存占用相当大(开发模式为300MB). 我想看看每个宝石在启动时有多少内存. 解决方法 我们有一个问题,我们的基本的Rails应用程序,没有流量或请求,启动时的占地面积达到140MB. 我们使用以下方法跟踪我们应用程序的
我有一个Rails 2.3.10应用程序与捆绑.在启动时,内存占用相当大(开发模式为300MB).

我想看看每个宝石在启动时有多少内存.

解决方法

我们有一个问题,我们的基本的Rails应用程序,没有流量或请求,启动时的占地面积达到140MB.

我们使用以下方法跟踪我们应用程序的Gemfile中指定的每个gem的内存要求,而无需尝试修补bundler.

>使用rails new myappname生成一个新的空轨应用程序
>将Gemfile从主项目复制到这个新的rails项目
>运行捆绑安装,然后运行rails服务器,以确保可以启动rails服务器,并加载所需的任何基本配置
>打开Gemfile,除了rails gem的规范之外,在每一行末尾附加require:false.确保使用一个名称指定但需要使用的任何其他宝石:require => ‘othergemname’使用较旧的ruby哈希符号,以便下面的模式匹配.
>再次运行bundle重新生成Gemfile.lock
>创建以下脚本,将手动使用需要Gemfile中指定的每个gem,并记录rails进程之前和之后消耗的系统内存.

# require_and_profile.rb
def require_and_profile(gemname = nil)
  unless gemname
    puts "%-20s: %10s | %10s" % ['gem','increment','total']
    return
  end
  # This is how to get memory of calling process in OS X,check host OS for variants
  memory_usage = `ps -o rss= -p #{Process.pid}`.to_i / 1024.0
  require gemname
  puts "%-20s: %10.2f | %10.2f" % [ gemname,(`ps -o rss= -p #{Process.pid}`.to_i / 1024.0 - memory_usage),(`ps -o rss= -p #{Process.pid}`.to_i / 1024.0)]
end

pattern = /^[^#]*gem[ ]*['"]([^,'"]*)['"][,~>0-9.'"]*(:require[ => ]*['"]([^'"]*)['"][,])?/

require_and_profile
File.open('Gemfile').each do |line|
  if line.match(pattern)
  if line.match(pattern)[3]
    require_and_profile line.match(pattern)[3]
  else
      require_and_profile line.match(pattern)[1]
    end
  end
end

>运行轨道c
> load’require_and_profile.rb’
>输出显示每个gem添加到基本应用程序占用空间(增量)的多少(以MB为单位),以及包含gem(总计)之后的总占地面积.

这有助于我们识别,例如,当我们只需要在资产组中时,我们就会在启动时要求资产同步.我们确实发现,在不同的引导下,每个宝石的内存占用不完全相同,但运行它几次会显示哪些是内存饥饿宝石的模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读