突然开始经历了巨大的等待时间,才请求服务器

我们的networking应用程序一天获得20k-30k的观看次数,并且稳步增长。 大约4天前,我们突然开始等待30-40秒的等待时间,之后甚至在前一天还在1秒内渲染HTML。

在新的文物合成中,这些时代简直就是“等待”。 通过监控nginx日志,我可以看到这些时间对应于传入请求到达服务器的时间。

这是一个运行在2GB液滴上的Unicorn&Nginx的Rails应用程序。 我以前根据这篇文章优化我的独angular兽configuration:https://www.digitalocean.com/community/tutorials/how-to-optimize-unicorn-workers-in-a-ruby-on-rails-app,和我们的内存使用量往往徘徊在50%左右。 尽pipe如此,我还注意到在上面的相同的日志输出中的一堆:

2016/03/15 06:52:36 [error] 9460#0: *1110377 connect() to unix:/tmp/unicorn.streamfeed.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 66.226.75.13, server: streamfeed.com, request: "GET /watch HTTP/1.1", upstream: "http://unix:/tmp/unicorn.streamfeed.sock:/watch", host: "streamfeed.com", referrer: "http://google.com/" 

在没有任何更好的想法的情况下,我认为可能意味着我们的stream量比独angular兽工人能够处理的stream量要多(我们的stream量一直在稳步增长,而且我们有一天还有最忙的一天)。 所以我把我们的液滴升到了4GB,使麒麟工人的数量增加了一倍,但是这并没有解决它 – 有时候我看到了这11个错误,有时候是110。

这不是我的代码优化的问题 – 一旦请求最终通过,包括任何数据库查询,相关操作仍然需要1-2秒才能实际处理(每New Relic)。 延迟发生在请求甚至到达服务器之前。 我们两个水滴(应用程序服务器和数据库)的CPU使用率都低于50%,内存使用率也是如此。 Unicorn日志中没有错误。 我已经尝试了我在网上find的每一个调整/优化nginx和独angular兽的方法,没有什么区别 – 如果有的话,加载时间不断增加。 我们现在正在等待处理请求的40-50秒,这实际上意味着我们的网站已经瘫痪。 在开始之前,我还没有改变任何相关的设置或代码很长一段时间。 我已经把我的相关文件回滚到开始发生时的状态,因为我所做的任何改变都没有改变。 我迫不及待想让我们的网站再次运作…希望有人在那里可以帮助。

nginx.conf:

 upstream unicorn { server unix:/tmp/unicorn.streamfeed.sock fail_timeout=0; } server { server_name www.streamfeed.com; rewrite ^(.*) http://streamfeed.com$1 permanent; } server { listen 80 default_server deferred; # server_name example.com; server_name streamfeed.com; root /home/deployer/apps/streamfeed/current/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; location ~* \.(js|css)$ { add_header Access-Control-Allow-Origin *; } } location ^~ /fonts/ { gzip_static on; expires max; add_header Cache-Control public; location ~* \.(ttf|ttc|otf|eot|woff|svg|font.css)$ { add_header Access-Control-Allow-Origin *; } } try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 30; } 

unicorn.rb:

 root = "/home/deployer/apps/streamfeed/current" working_directory root pid "#{root}/tmp/pids/unicorn.pid" stderr_path "#{root}/log/unicorn.log" stdout_path "#{root}/log/unicorn.log" listen "/tmp/unicorn.streamfeed.sock" worker_processes 11 timeout 60 

config.ru:#此文件由基于机架的服务器用于启动应用程序。

 if ENV['RAILS_ENV'] == 'production' require 'unicorn/worker_killer' max_request_min = 500 max_request_max = 600 # Max requests per worker use Unicorn::WorkerKiller::MaxRequests, max_request_min, max_request_max oom_min = (240) * (1024**2) oom_max = (260) * (1024**2) # Max memory size (RSS) per worker use Unicorn::WorkerKiller::Oom, oom_min, oom_max end require ::File.expand_path('../config/environment', __FILE__) run Rails.application