我们在带有Sidekiq的Heroku上有一个Rails应用程序,并且数据库连接不足。
MAX_THREADS: 5
(DB_POOL not set)
(WEB_CONCURRENCY not set)
Heroku东西:
数据库计划:Standard0(120个连接)
Web dynos:2 Standard-2X
工作人员dynos:1 Standard-2X
heroku config:
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq
Procfile:
...
production:
url: <%= ENV["DATABASE_URL"] %>
pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %>
database.yml中:
# https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#adding-puma-to-your-application
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 2)
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-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
puma.rb:
---
:concurrency: 25
:queues:
- [default]
sidekiq.yml:
onProxyResponseFailure
我们还有一些佣金任务,每10分钟启动一次,并在一两秒内完成。
当我们在sidekiq中进行大量的消息处理时,问题似乎发生了。我们做的事情如下:
虽然第4号正在发生,但我们看到了连接问题。
我的理解是我们的方式,方式,方式,低于我们上面的配置的连接限制,但我们做错了什么?是什么东西只是消耗池?任何帮助都会很棒,谢谢。
来源:
答案 0 :(得分:5)
您在25个Sidekiq线程中共享5个DB连接。将DB_POOL设置为25或将Sidekiq的并发设置为5。