所以我在本地运行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
答案 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'