我正在使用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被路由到我的控制器方法“文章”,它现在只是这样做:
def articles format = params[:format] keyword = params["q"] Rails.logger.info "Searching articles for keyword: #{keyword},format: #{format},Time: #{Time.now.to_s}" end
这是我的路线
MyApp::Application.routes.draw do match '/search/articles' => 'search#articles' #more routes here,but articles is the first route end
什么可能导致这种延迟?是因为独角兽工作忙吗?是因为独角兽的工作人员占用了太多的内存,导致系统缓慢吗?
注意:我不相信延迟是在任何数据库连接,但我可能是错误的.代码不需要进行数据库调用,我的数据库的最大连接数为1000,通常最多有1-2个连接.
解决方法
三个想法:
>你可能会使用美洲狮而不是独角兽更好地服务>可能是您的系统内存不足,或者可能有足够的内存可用:安装新文件以解决瓶颈在哪里>还可能的是,您的数据库数量可能超过数据库允许的连接数,在这种情况下,实例必须等待其他人断开连接才能连接.这可能表现为不规则的5秒延迟,而不是每次发生.