首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >低开销Ruby分析?

低开销Ruby分析?
EN

Stack Overflow用户
提问于 2010-09-28 14:25:28
回答 2查看 1.3K关注 0票数 2

我有一个Ruby程序,大约需要4分钟才能完成任务,我想把它降到1分钟以下。

我尝试了宝石的ruby-prof,但允许它将运行时间增加到30分钟,甚至似乎没有特别好地保持单调性(一些更改可靠地提高了性能,并可靠地降低了性能-没有分析器)。这个任务也不能真正地被分解成能够被有意义地独立描述的部分。

当前对开销最低的Ruby代码进行分析的最佳方法是什么?

我使用OSX,但是如果由于任何原因,分析器需要另一个操作系统,我可能会重新启动。

编辑:perftools.rb的开销要低得多,但是结果诚实地看上去相当可疑,远远超出了任何合理的抽样错误--至少它一定是在干扰GC或i/o缓冲区之类的操作,从而导致了许多愚蠢的错误。它仍然胜过红宝石教授。

如果有人知道比这更好的事情,我就把问题提出来。

EN

回答 2

Stack Overflow用户

发布于 2010-09-28 15:33:35

我认为无论是MRI还是YARV,你都不能做得更好。

然而,Rubinius有一个内置的分析器(只需使用-Xprofile调用),开销要小得多。

使用JRuby,您可以获得整个Java数组,其中包括一些有史以来创建的最好的分析器。即使没有对JRuby的特定支持,这些工具也可能非常有用。Oracle有一个非常酷的VisualVM工具,它允许您可视化有关您的程序的各种内容(而且AFAIK甚至还有一个JRuby插件)。甲骨文JRockit也有一个很好的分析器。有传言称,Azul JVM拥有一个绝对令人惊叹的、令人敬畏的剖析器。我认为J9也有一个很棒的。当然,还有YourKit

Charles和JRuby社区的其他成员最近写了一系列关于使用JRuby理解JRuby代码运行时行为的文章。大多数情况下,这些文章是作为对MRI记忆库的反应编写的,因此它们倾向于关注内存分析,但其中也有一些关于调用分析的内容。

MacRuby的目标之一是能够使用XCode的运行时理解工具( goals and Co.)对于Ruby,但这是一个长期的目标,我不知道这是否已经实现。

下面是Rubinius的一个小例子:

代码语言:javascript
复制
rbx -Xprofile -e'
  Hash.new {|fibs, n|
    fibs[n] = if n < 2 then n else fibs[n-1] + fibs[n-2] end
  }[100]
'

其中的指纹:

代码语言:javascript
复制
Total running time: 0.009895000000000001s

  %   cumulative   self                self     total
 time   seconds   seconds      calls  ms/call  ms/call  name
------------------------------------------------------------
   7.59    0.00      0.00        234     0.00     0.01  Hash#find_entry
   5.86    0.00      0.00        419     0.00     0.00  Hash#key_index
   5.49    0.00      0.00        275     0.00     0.00  Hash::Entry#match?
   4.97    0.01      0.00        234     0.00     0.02  Hash#[]

正如您所看到的,Rubinius分析器的一个有趣的特性是,由于它可以分析任意Ruby代码,而Rubinius本身主要是Ruby代码,所以它可以深入到系统本身。

票数 6
EN

Stack Overflow用户

发布于 2010-09-28 17:26:00

任何给你自我时间的分析器,在函数级别的报告,认为准确性和效率很重要,并给你一个调用图,是基于与最初的gprof相同的一组概念,有一些细微的变化。ruby_prof只是众多例子中的一个。

这就是为什么这不太好。

下面是一种实际发现问题的方法,这样您就可以使代码运行得更快,而不必购买或安装任何东西。

加速。

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

https://stackoverflow.com/questions/3813761

复制
相关文章

相似问题

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