首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby分析器堆栈级别太深错误

Ruby分析器堆栈级别太深错误
EN

Stack Overflow用户
提问于 2012-07-27 17:17:41
回答 3查看 2K关注 0票数 4

在我的脚本中,似乎总是会出现这样的错误:

代码语言:javascript
复制
/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脚本

代码语言:javascript
复制
ruby-prof --printer=graph --file=profile.txt scraper.rb -- "fall 2012"

编辑我在Mac上,如果这重要的话。不幸的是,做ulimit -s 64000似乎没有多大帮助。以下是ulimit -a给出的内容:

代码语言:javascript
复制
$ 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的解决方案可以很好地防止ruby prof崩溃,但是分析器似乎也有自己的问题,因为我看到大约679.50%的时间用于一个过程.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-31 23:23:51

解决办法之一是启动尾呼叫优化

下面是一个示例,它与TCO一起工作,但在TCO关闭时不起作用。

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2012-07-27 17:57:39

堆栈级别太深通常意味着无限循环。如果您查看发生错误的ruby-prof代码,您将看到它是一种检测调用堆栈中递归的方法。

尝试查看您正在使用递归的代码(您的代码中有多少地方可以使用递归?)看看是否有什么条件会让它永远不会跌到谷底?

这也可能意味着您的系统堆栈不够大,无法处理您想要做的事情。也许您正在递归地处理一个大型数据集?您可以检查堆栈大小(unixy系统):

$ ulimit -a

增加堆栈大小

$ ulimit -s 16384

您还可以考虑调整算法。参见此堆栈溢出队列。

我希望我不是在重提一个现存的问题.

票数 3
EN

Stack Overflow用户

发布于 2013-02-11 21:40:22

在Ruby中,百分比超过100%的是已知的臭虫,但现在应该修复。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11692559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档