我遇到了一种异常情况,无法深入了解。我们有一个4.1
正在jRuby 1.7.12
内部运行的Rails应用程序Torquebox 3.1.0
。API端点之一检索对象列表。
当前,数据库中的记录不足7000条。发出API请求时,将使用ActiveModel::Serializers
gem来查询这些记录并以JSON形式进行呈现。所有这些都能按我们期望的那样工作,并且在rails控制台中完成此工作非常完美。
问题出在发出实际的API请求时。它似乎按预期工作,并查看rails日志,有输出
Completed 200 OK in 6354ms (Views: 5479.0ms | ActiveRecord: 867.0ms)
此时,我希望看到服务器返回的数据,但是实际要花费2.7分钟才能看到服务器的响应。我尝试通过发出请求Chrome
,Safari
甚至curl
只是为了确保这不是一个奇怪的浏览器问题,但没有任何运气。
我所描述的实施串行器内的一些缓存这里。我很确定这不是问题,因为它可以在控制台中按预期工作,所以我真的很困惑。
还有什么可能导致2分钟以上的延迟。在这段时间里,我发现Java的CPU使用率大约为100%,因此肯定会发生某些事情。
好吧,事实证明这是bullet
宝石一直在占据。似乎对于这么多的记录,检测是否存在N + 1查询非常耗时。只需禁用子弹,就可以将时间完全缩短到Rails控制台所说的时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句