处理请求时每行执行所花费的 Rails 分析时间

Posted

技术标签:

【中文标题】处理请求时每行执行所花费的 Rails 分析时间【英文标题】:Rails profiling time taken for each line execution while process request 【发布时间】:2021-09-29 12:55:49 【问题描述】:

有没有更好的方法来查找处理 HTTP 请求时执行的每个逻辑所花费的时间。我们需要单独分析而不是分组分析,并为多件事留出时间。我们尝试了 NewRelic、AppSignal 来获取这些数据,但没有成功。

我也添加了截图,在这里我们可以看到 ActiveRecord 大约需要 1.5 秒,视图渲染视图(响应)大约需要 300 毫秒。当我们将这两者相加时,大约需要 2 秒,但请求的总时间是 10 秒。我们无法找到其余 8 秒的时间。 NewRelic 说 90% 的时间来自控制器操作,但没有故障。有没有更好的工具来获取更详细的信息?

注意:大部分时间它工作正常,我们在特定时间遇到问题。但我们没有导致缓慢的原因,只能确定这一点,我们希望工具能够找到它。

【问题讨论】:

【参考方案1】:

AppSignal 可以帮助您解决此问题,以下是 AppSignal 在查看特定操作的性能时提供的事件时间线示例。

这是为 Rails 提供的。在某些情况下,您希望进一步缩小custom instrumentation 的范围,它可以帮助您找到导致性能问题的特定代码。

您可以reach out to us at AppSignal,我很乐意为您提供帮助。

【讨论】:

【参考方案2】:

可能有一些工具选项可以为您提供更多开箱即用的信息。但是,如果您真的想找出瓶颈,您可能希望自己动手做一些好的老式调试。在控制器操作中使用 ruby​​ 的内置 Benchmark 模块并记录结果。这可以帮助您确定哪些代码段会占用响应时间。

https://ruby-doc.org/stdlib-3.0.0/libdoc/benchmark/rdoc/Benchmark.html

【讨论】:

以上是关于处理请求时每行执行所花费的 Rails 分析时间的主要内容,如果未能解决你的问题,请参考以下文章

算法复杂度分析

在使用 K6 时测量 x 个请求的持续时间

如何使用Rails和Heroku创建多个并行并发请求

Flask 的请求和基本分析信息

用于实时站点的简单 PHP Profiler?

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