Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 后续的unicorn请求非常慢_Ruby On Rails_Ruby_Amazon Web Services_Unicorn - Fatal编程技术网

Ruby on rails 后续的unicorn请求非常慢

Ruby on rails 后续的unicorn请求非常慢,ruby-on-rails,ruby,amazon-web-services,unicorn,Ruby On Rails,Ruby,Amazon Web Services,Unicorn,我在unicorn上运行rails 2应用程序,遇到了奇怪的行为。当我第一次启动服务器并发出第一个请求时,整个页面加载的速度非常快,小于3秒。每个后续请求需要30-45秒以上的时间。当我跟踪日志时,在前30多秒内,实际上没有记录任何内容。然后页面突然加载,日志显示出来。这就好像请求只是挂起30秒以上 当我使用script/server或thin运行相同的代码时,它运行得很快,并且与预期的一样 目前我们正在Heroku上运行unicorn,没有这些问题。我正在迁移到AWS的过程中,这就是我遇到问题

我在unicorn上运行rails 2应用程序,遇到了奇怪的行为。当我第一次启动服务器并发出第一个请求时,整个页面加载的速度非常快,小于3秒。每个后续请求需要30-45秒以上的时间。当我跟踪日志时,在前30多秒内,实际上没有记录任何内容。然后页面突然加载,日志显示出来。这就好像请求只是挂起30秒以上

当我使用script/server或thin运行相同的代码时,它运行得很快,并且与预期的一样

目前我们正在Heroku上运行unicorn,没有这些问题。我正在迁移到AWS的过程中,这就是我遇到问题的地方。在运行unicorn时,我在本地VM上也遇到了同样的问题

这是我的配置

bundle exec unicorn-c./config/unicorn.rb

更新


我已经把范围缩小到阻止工人完成的事情。我有一个30秒的超时,即使请求只需要1秒就可以完成,它也不会接受更多的请求,直到超时发生。有没有什么好方法可以找出阻止worker可用的原因?

本地VM/EC2设置和heroku设置之间的ruby和gem版本是否匹配?是的。相同的Gemfile和相同的Gemfile.lock您的VM和EC2机器运行相同的操作系统内核吗?我怀疑heroku内核是不同的。是的,VM和EC2是不同的。内核不同的可能性很大。只是想一想,但是database.yml中的数据库池大小是多少?
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
timeout 90
preload_app true
listen (ENV['PORT'] || 8000), :backlog => Integer(ENV['UNICORN_BACKLOG'] || 20)

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  # AR
  ActiveRecord::Base.connection.disconnect!

  # Redis
  begin
    Timeout.timeout(2) { REDIS.quit }
  rescue Exception
    # This likely means the redis service is down
  end
end

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  # AR
  ActiveRecord::Base.establish_connection

  # Redis
  uri = URI.parse(ENV["REDIS_URL"])
  REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)

  # Dalli
  Rails.cache.reset

  # Mongoid
  Mongoid::Setup.run
end