当在本地使用Rails 4时使用rbtrace时,如何防止等待eval响应超时?

时间:2015-06-23 23:11:30

标签: ruby-on-rails ruby performance

所以我在本地运行Rails 4应用程序(API),进程ID为11697.我有以下设置,但是我通过bash命令得到以下响应:

*** run `sudo sysctl kernel.msgmnb=1048576` to prevent losing events (currently: 16384 bytes)
*** attached to process 11697
*** timed out waiting for eval response
*** detached from process 11697

在超时之前似乎没有等待600秒。 I've seen this PR on github, so it seems like it should work

这里的目标是获取Rails应用程序对象的多个堆快照,并比较2个差异以尝试检测内存泄漏。

到config / environment.rb

# Load the Rails application.
require File.expand_path('../application', __FILE__)
require 'rbtrace'

# Initialize the Rails application.
Rails.application.initialize!

bash命令提示符

bundle exec rbtrace -p 11697 -e 'Thread.new{require "objspace"; ObjectSpace.trace_object_allocations_start; GC.start(); ObjectSpace.dump_all(output: File.open("heap.json", "w"))}.join'  --timeout=600

1 个答案:

答案 0 :(得分:3)

看起来不同的PR(42)就是6月14日actually merged来解决这个问题,而且自February 13th以来他们没有发布rbtrace

所以代码被合并到master中,但它还没有通过rubygems.org发布。

您可以将rbtrace gem的主分支添加为gemfile中的依赖项,如下例所示。您将拥有为eval启用超时选项的PR代码,但master分支可能尚未完全准备好用于生产。使用风险自负!

gem 'rbtrace', git: 'https://github.com/tmm1/rbtrace', branch: 'master'