【发布时间】:2018-03-29 06:03:13
【问题描述】:
我有一个正在打印运输标签的 Rails 4.2 应用程序。 New Relic 仪表显示它在控制器中花费了 35% 的时间(不包括控制器方法的操作),我不明白为什么。应用流程很简单:
- 验证用户身份
- 构建 AR 对象
- 验证地址(外部微服务调用)
- 计算价格
- 在 Redis 中生成跟踪号
- 坚持AR到PG
- 生成运单号
- 生成响应
第 1 步是使用查询 PG 的设计完成的。步骤 2 到 8 包含在 LabelsController#generate 中(更准确地说是控制器调用的服务类)。
New Relic 追踪显示了所有这些步骤以及它们需要多长时间。它显示 LabelsController#generate 采用 229ms - 但即使 #generate 调用 CalculatePrice、DrawLabel 等,它也没有 CalculatePrice (138ms)、DrawLabel (118ms) 等。这只是 New Relic 分解自定义跟踪的方式。如果我不为所有这些添加特定的自定义跟踪,那么它会在#generate(接近800ms)下正确聚合CalculatePrice、DrawLabel、ValidateAddress 等。所以......如果我已经检测了#generate 中的所有步骤,那么控制器还做了什么需要这么长时间(除了执行操作方法的主体)?这是发生 Rails 锁定的地方吗?我认为这是在其中一个中间件中。
这是在一个服务器实例上仅跟踪 1 个请求。
【问题讨论】:
-
渲染视图?
-
它是一个API,所以它只渲染:json
-
还需要渲染
标签: ruby-on-rails ruby-on-rails-4 actioncontroller