ruby - 如何让 ruby​​-prof 忽略 Ruby 核心/标准库/gem 方法?

标签 ruby performance profiling ruby-prof

我是 Ruby 分析的新手,看起来像 ruby-prof是一个受欢迎的选择。我刚刚安装了 gem 并调用了我的程序:

ruby-prof ./my-prog.rb

但是,输出非常冗长,因为包含所有 Ruby 核心和标准库方法以及其他 gem 的分析数据。例如,前三行是:

8.79      0.011     0.010     0.000     0.001     3343  *String#% 
7.28      0.078     0.009     0.000     0.069     2068  *Array#each 
4.93      0.038     0.006     0.000     0.032     1098  *Array#map 

这对我来说不是什么有用的信息,因为我已经知道我的程序经常处理字符串和数组,并且大概已经对这些类进行了优化。我只关心代码中的热点。

我尝试了其他一些打印机模式,例如-p graph_html-p call_stack,但是他们都有同样的问题。

我看到 ruby-prof 支持一些方法消除和简化:

-x, --exclude regexp             exclude methods by regexp (see method elimination)
-X, --exclude-file file          exclude methods by regexp listed in file (see method elimination)
    --exclude-common-cycles      make common iterators like Integer#times appear inlined
    --exclude-common-callbacks   make common callbacks invocations like Integer#times appear

但似乎没有任何明显的方法可以得到我真正想要的东西,只是我的代码的分析数据,即随着时间的流逝,Ruby 核心/stdlib 的代码内部,和其他 gem 仅在我的代码中计算为耗时。

一旦我看到我的代码有一个方法 foo,由于被调用了数千次并且性能不佳而成为性能瓶颈,然后我做想要查看我的代码和在该特定方法中调用的核心/库代码之间耗时的分割。

我不明白为什么这不是标准功能,因为我希望这是每个人都想做的事情:首先分析您自己的代码,然后一旦您用完了所有需要优化的东西,可能会开始优化你使用的 gem,甚至可能是 Ruby 核心/stdlib。我错过了什么?

最佳答案

我同意这是 ruby​​-prof 的一个大问题。我倾向于选择 perftools.rb .它与 gperftools 集成它支持各种focus and ignore options ,以及有助于快速理解的图形报告 hotspots and their call trees .

使用 ruby​​-prof,您还可以尝试输出 KCacheGrind 格式并使用 KCacheGrind Viewer进行分析。它具有多种可视化模式,有助于对结果进行临时过滤和探索。

关于ruby - 如何让 ruby​​-prof 忽略 Ruby 核心/标准库/gem 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171675/

相关文章:

python - 在所有方向和所有元素上获得一阶微分的最佳方法

sql-server - SQL IF ELSE 性能问题

ruby-on-rails - 格式化 helper_methods 以便在 View 中使用

Ruby 数组改变子字符串

python - 支持大圆距离和多边形的快速 python GIS 库

c++ - 按事件类型分析程序

flash - Flex Profiler - 替代方案?

python - 如何分析一个scrapy python脚本?

ruby-on-rails - 通过多态关联 rails 创建对象

ruby-on-rails - 无法安装,因为我没有足够高的 Ruby 版本,但我有