【问题标题】:Need to know where time is spent in Rails request execution需要知道 Rails 请求执行的时间花在了哪里
【发布时间】:2020-06-11 12:25:27
【问题描述】:

这是在生产环境中运行时来自 rails 服务器的日志: Completed 200 OK in 3309ms (Views: 157.9ms | Searchkick: 95.5ms | ActiveRecord: 297.1ms)

如果我们将 3 个进程(视图、searchkick、活动记录)所花费的时间加起来 它大约是 550 毫秒,但请求所花费的总时间大约是 3300 毫秒

如何知道剩余时间花在哪里??

同样的 API 请求 3 次尝试也需要不同的时间:

INFO -- : Completed 200 OK in 3309ms (Views: 157.9ms | Searchkick: 95.5ms | ActiveRecord: 297.1ms) INFO -- : Completed 200 OK in 1579ms (Views: 110.9ms | Searchkick: 48.5ms | ActiveRecord: 212.5ms) INFO -- : Completed 200 OK in 915ms (Views: 161.9ms | Searchkick: 76.6ms | ActiveRecord: 289.7ms)

为什么完全相同的请求的执行时间会有如此大的差异??

注意:这是一个 API 请求。响应是 JSON 数据。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 logging benchmarking


    【解决方案1】:

    我无法添加评论,所以我在这里发布答案。我会在网络选项卡中检查 Chrome 的检查,看看是否有资产需要太长时间才能下载。此外,还有一个非常棒的游戏,叫做 rack-mini-profiler,它很有用:https://github.com/MiniProfiler/rack-mini-profiler

    【讨论】:

    • 资产加载时间不应显示在 rails 日志中。这里的问题只是 rails 日志中报告的数字存在差异。
    【解决方案2】:

    您可以将请求分为两部分:后端和前端。用于操作调用和查询的后端时间可以从日志中看到,增加日志级别并添加基准。

    对于前端,请参阅浏览器控制台以查看何时收到响应,然后解析任何 json 或任何响应数据并呈现要显示的最终 html。

    【讨论】:

    • 这个日志是服务器的Completed 200 OK in 3309ms (Views: 157.9ms | Searchkick: 95.5ms | ActiveRecord: 297.1ms)。即使我提高日志级别,它也只会告诉每个 Elasticsearch 和数据库查询花费多少时间。但这不是问题Searchkick 需要 95 毫秒,ActiveRecord 需要 297 毫秒。如何知道哪个进程需要时间??
    • 安装wireshark并检查每个发送的请求@NishantKumar
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多