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

Ruby profiler堆栈级别太深错误

发布时间:2020-12-17 04:00:21 所属栏目:百科 来源:网络整理
导读:好像我总是在我的一个脚本上出现这个错误: /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/ruby-prof-0.11.2/lib/ruby-prof/profile.rb:25: stack level too deep (SystemStackError) 有没有人遇到此错误?可能导致它的原因,以及我可以采取哪些措施来防止它
好像我总是在我的一个脚本上出现这个错误:

/Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/ruby-prof-0.11.2/lib/ruby-prof/profile.rb:25: stack level too deep (SystemStackError)

有没有人遇到此错误?可能导致它的原因,以及我可以采取哪些措施来防止它发生?

我使用命令运行我的ruby-prof脚本

ruby-prof --printer=graph --file=profile.txt scraper.rb -- "fall 2012"

编辑我在Mac OS X上,如果这很重要.不幸的是,做ulimit -s 64000似乎没什么帮助.这是ulimit -a给出的:

$ulimit -a
core file size          (blocks,-c) 0
data seg size           (kbytes,-d) unlimited
file size               (blocks,-f) unlimited
max locked memory       (kbytes,-l) unlimited
max memory size         (kbytes,-m) unlimited
open files                      (-n) 256
pipe size            (512 bytes,-p) 1
stack size              (kbytes,-s) 64000
cpu time               (seconds,-t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes,-v) unlimited

编辑2

Andrew Grimm的解决方案可以很好地防止ruby-prof崩溃,但是分析器似乎有自己的问题,因为我看到百分比占流程总时间的679.50%……

解决方法

一个解决方法是 turn tail call optimization on.

以下是与TCO配合使用的示例,但在TCO关闭时不起作用.

RubyVM::InstructionSequence.compile_option = {
  :tailcall_optimization => true,:trace_instruction => false
}

def countUpTo(current,final)
  puts current
  return nil if current == final
  countUpTo(current+1,final)
end

countUpTo(1,10_000)

(编辑:李大同)

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

    推荐文章
      热点阅读