我有一个Rails 4.2应用程序正在打印运输标签。 New Relic仪器显示它在控制器中花费了35%的时间(不包括控制器方法的操作),我不明白为什么。应用程序流程很简单:
步骤1通过查询PG的Devise完成。步骤2到8包含在LabelsController#generate
中(更确切地说是控制器调用的服务类)。
New Relic追踪显示了所有这些步骤以及它们需要多长时间。它显示了LabelsController#generate需要229ms
- 但是没有CalculatePrice(138ms),DrawLabel(118ms)等,即使#generate调用CalculatePrice,DrawLabel等等。它只是新的Relic打破自定义跟踪的方法。如果我没有为所有这些添加特定的自定义跟踪,那么它将在#generate(将接近800ms
)下正确地聚合CalculatePrice,DrawLabel,ValidateAddress等。所以...如果我已经检测了#generate中的所有步骤,那么控制器还需要做什么这么长时间(除了执行action方法的主体之外)?这是Rails锁定发生的地方吗?我认为这是其中一个中间件。
这是在一个服务器实例上仅跟踪1个请求。
答案 0 :(得分:0)
在我添加了更多的工具后,结果是控制器中另外33%的调用:JSON模式验证和设计验证。