【发布时间】:2015-10-14 06:36:04
【问题描述】:
我使用 Unicorn 作为我的 Rails 应用程序的应用程序服务器,并试图弄清楚为什么有时在请求开始和到达我的控制器之间存在不平凡(> 5 秒)的延迟.
这是我的 production.log 打印出来的:
Started GET "/search/articles.json?q=mashable.com" for 138.7.7.33 at 2015-07-23 14:59:19 -0400**
Parameters: {"q"=>"mashable.com"}
Searching articles for keyword: mashable.com, format: json, Time: 2015-07-23 14:59:26 -0400
注意在 STARTED GET: 和“搜索文章的关键字”之间有 7 秒的延迟,这是控制器方法所做的第一件事。
articles.json 被路由到我的控制器方法“articles”,它现在只是这样做:
def articles
format = params[:format]
keyword = params["q"]
Rails.logger.info "Searching articles for keyword: #{keyword}, format: #{format}, Time: #{Time.now.to_s}"
end
这是我的路线.rb
MyApp::Application.routes.draw do
match '/search/articles' => 'search#articles'
#more routes here, but articles is the first route
end
什么可能导致这种延迟?是因为独角兽工人很忙吗?是不是因为 Unicorn worker 占用了太多内存导致系统变慢?
注意:我不认为延迟是在建立任何数据库连接,但我可能是错的。代码不需要进行数据库调用,我的数据库的最大连接数是1000,通常最多有1-2个连接。
【问题讨论】:
-
可能有多种原因 - 您需要监控系统资源以及独角兽。如果什么都没有,添加一个新的代理可能是最快/最简单的选择
-
Puma、Passenger 等公司也会出现这种情况吗?
-
GET请求的最后一行是什么意思,即sais
Completed 200 OK in 100ms (Views: 50.0ms | ActiveRecord: 50.0ms) -
您是否尝试过使用不同的应用服务器来查看它是否只是独角兽?
-
这个应用程序在什么环境中运行,您可以分享尽可能多的细节? Rails 环境是生产还是开发?是在云端吗?谁以及虚拟服务器的规格是什么?换句话说,环境是什么?此外,您为尝试监控或解决问题做了哪些工作?当延迟发生时,在此之前发生了什么?例如,您是否推送了新代码以便服务器对资产进行预处理?谢谢...
标签: ruby-on-rails ruby unicorn