我正在使用rails项目充当iPhone应用程序的服务器和后端数据库。在我尝试进行负载测试时,我开始收到错误,说有太多的db:连接,当我用pg:info检查时,我看到它是真的(连接:160/120)。
这在测试过程中对我有所帮助,但在它结束后仍然显示许多开放的连接让我感到困惑。我的问题
1)为什么这些数据库连接在进程运行完毕后仍保持打开状态?
2)我的配置中出现了什么导致这种情况?
rails: 4.2.4
Postgres: 9.4.4
Heroku dynos: five 1x-dynos
Web Server: Puma
Puma Workers: 2
Puma Threads: 9
Database Pool: ENV["DB_POOL"] || ENV['MAX_THREADS'] || 6 (so probably also 9 as MAX_THREADS is set to that)
3)有什么方法可以在流程结束后将连接设置为关闭?
这是我第一次尝试设计可扩展的东西,如果这是基本的地狱,请告诉我是否有任何我忘记包含的内容。
puma.rb
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 6)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rail-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end