如何防止在本地将rbtrace与Rails4一起使用时等待eval响应超时



所以我在本地运行一个Rails4应用程序(一个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秒就可以超时。我在github上看到过这个公关,所以它似乎应该起作用。

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

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

看起来不同的PR(42)实际上是在6月14日合并的,以解决这个问题,并且自2月13日以来,他们还没有发布rbtrace

因此,代码被合并到master中,但尚未通过rubygems.org发布

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

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

最新更新