如何在 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 中分析请求?的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?
如何使用 Ruby on Rails 发出 HTTP 请求?