我有一个 Rails 4 应用程序,它返回大量以 JSON 呈现的数据(23K 记录/2.8MB 文档)。使用 WEBrick 服务器在我的笔记本电脑上测试此调用,请求在 573ms 内完成。
Completed 200 OK in 573ms (Views: 0.1ms | ActiveRecord: 51.2ms)
如果我切换到带有 Phusion Passenger 的 Apache,完全相同的请求需要 3025 毫秒才能完成。
Completed 200 OK in 3025ms (Views: 0.1ms | ActiveRecord: 53.9ms)
我不明白 Passenger 为何会慢这么多。您有什么看法吗?
我的开发环境运行的是 OS X 10.7.5。我安装了 Apache 2.2.24 和 Passenger 4.0.23。
答案1
我会退房
http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/
尤其是“dtruss”部分(#5)。使用 -e 选项查看已用时间,并查看 Apache 和 Phusion Passenger 进行的所有系统调用。您希望发现的是,较慢的路由正在搜索一堆额外的目录,或加载一堆其他库等,或进行一堆奇怪的 DNS 调用。您可能会猜到,Phusion Passenger 在实际计算中不太可能以某种方式变慢。差异是否与记录数量成线性关系?
抱歉,这不是 Apache / Phusion Passenger 特有的……我不熟悉 PP,但根据我的经验,由于它们是两个独立的服务器,因此从 Apache 到 Phusion Passenger 的调用可能会比使用集成的 Webrick 增加更多的延迟。dtruss 的妙处在于,您可以在两个服务器上运行它,并查看哪个服务器对延迟负有更大责任。如果您尝试了这个实用程序,请发布结果,我非常好奇。