出现错误ThreadError和服务器挂起

时间:2018-11-13 10:15:44

标签: ruby-on-rails amazon-ec2 puma

我正在实例类型为 t3.small ec2 服务器中运行 rails 5.2.1 应用。但是服务器在运行几天后挂起。在puma_access.log中有以下错误日志

Listen loop error: #<ThreadError: can't create Thread: Resource temporarily unavailable>
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `initialize'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `new'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `spawn_thread'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:162:in `block in <<'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:154:in `synchronize'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:154:in `<<'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:398:in `block in handle_servers'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:385:in `each'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:385:in `handle_servers'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:358:in `block in run'

在服务器中,我们连接到两个RDS实例,第二个通过使用类

class SecondDbBase < ActiveRecord::Base
  establish_connection "#{Rails.env}_sec".to_sym
  self.abstract_class = true

  def readonly?
     true
  end

  def write_attribute(name, value)
    raise NotImplementedError, 'read only table'
  end

end

在相应的模型中,我扩展了类

class Student < SecondDbBase

puma.rb文件

workers 1
# Min and Max threads per worker
threads 1, 6

app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
tmp_dir = "#{app_dir}/tmp"

# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env

# Set up socket location
bind "unix://#{tmp_dir}/sockets/puma.sock"

# Logging
stdout_redirect "#{tmp_dir}/log/puma.stdout.log", "#{tmp_dir}/log/puma.stderr.log", true

# Set master PID and state locations
pidfile "#{tmp_dir}/pids/puma.pid"
state_path "#{tmp_dir}/pids/puma.state"
preload_app!
activate_control_app

on_worker_boot do
    require "active_record"
    ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
    ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end

该问题是否与任何数据库连接池有关?我该怎么解决?

0 个答案:

没有答案