如何在 Ruby on Rails 中分析请求?

Posted

技术标签:

【中文标题】如何在 Ruby on Rails 中分析请求?【英文标题】:How can I profile a request in Ruby on Rails? 【发布时间】:2010-04-26 19:53:17 【问题描述】:

如何分析控制器操作?

我的一个观点是渲染需要相当长的时间,我想将其分解。我看到script/performance/profiler,但这似乎只能访问全局范围。

【问题讨论】:

【参考方案1】:

ruby-prof 是要走的路。这是一个方法,How to profile your Rails and Ruby applications with ruby-prof

如果您将它与kcachegrind 等可视化工具结合使用,您可以轻松地将作为您的应用程序代码的代码与框架代码分开。

不久前,我在我当地的 Ruby 用户组就这些工具做了一次演讲:Making your rails app kick ass with ruby-prof and kcachegrind

【讨论】:

我尝试按照此处给出的链接中的说明进行操作,但发现从 Rails 2.3.2 开始删除了 script/performance/request 是的,这个答案是 Rails-2 特定的,因为我在 2010 年给出了这个答案。不确定 Rails 3 的做法...... Changelog (rails.rubyonrails.org/files/railties/CHANGELOG.html) 说:删除脚本/性能/请求以支持性能集成测试。 [Pratik Naik]“要继续使用脚本/性能/请求,请安装 request_profiler 插件:script/plugin install git://github.com/rails/request_profiler.git”【参考方案2】:

Ruby on Rails 控制台应该会显示哪些部分需要一段时间才能呈现。如果这还不够,您可以安装新的 relic gem (https://github.com/newrelic/rpm) 并在开发人员模式下使用它,这将使您大致了解正在发生的事情。

如果您在 Heroku 上进行部署,您可以添加免费版本的 rpm,它会为您提供有关正在运行的应用程序的相同统计信息。

Ruby 有一个分析器 (http://ruby-prof.rubyforge.org/),它会向您显示内存使用情况、调用时间等,但可能很难从框架代码中传播您的代码。

【讨论】:

New Relic 可以告诉您更多信息,但它没有完整性能分析所必需的逐行代码分析。 并且不在windof下【参考方案3】:

我在https://github.com/bhb/rack-perftools_profiler 上取得了一些成功

它可以让您对任何 cputime、方法、对象分配或 walltime 的单个或多个请求进行分析,并通过 Rack 中间件很好地集成。

【讨论】:

以上是关于如何在 Ruby on Rails 中分析请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 1.9.2 中分析 Ruby 代码?

如何在 Ruby 中分析 `require` 语句?

Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?

如何使用 Ruby on Rails 发出 HTTP 请求?

如何在 ruby​​-on-rails 应用程序上使用 Rack 发送 POST 模拟请求?

如何使用 Ruby on Rails 发出 HTTP 请求?