[英]Heroku + Sidekiq + Redis + Puma configuration issue
我在Heroku中有一個與sidekiq + Redis + puma一起運行的應用程序。
Heroku配置:
Redis總計划連接限制:200(使用Heroku Redis)
彪馬
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
workers ENV.fetch("WEB_CONCURRENCY") { 2 }
sidekiq.rb
require 'sidekiq'
Sidekiq.configure_client do |config|
config.redis = { size: 1 }
end
Sidekiq.configure_server do |config|
config.redis = { size: 4 }
end
sidekiq.yml
production:
:concurrency: 2
redis.rb
Redis.current = Redis.new(url: ENV[ENV['REDIS_PROVIDER'] || 'REDIS_URL'])
上面的配置工作正常,但根據目前使用34個連接的上述配置,我無法使用最大連接數
另外,當我更改上面的配置時,這些錯誤將無法正常工作:
could not obtain a connection from the pool within 5.000 seconds (waited 5.002
seconds); all pooled connections were in use
我正在關注這個計算器
我還使用了REDIS_URL而不是大小,
Sidekiq.configure_client do |config|
config.redis = { url: ENV['REDIS_URL'] || 'redis://localhost:6379/1' }
end
Sidekiq.configure_server do |config|
config.redis = { url: ENV['REDIS_URL'] || 'redis://localhost:6379/1' }
end
那時我們也收到此錯誤:在5.000秒(等待的5.007秒)內無法從池中獲得連接; 所有池化連接都在使用中
完整回溯:
could not obtain a connection from the pool within 5.000 seconds (waited 5.002 seconds); all pooled connections were in use..["/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:202:in `block in wait_poll'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:193:in `loop'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:193:in `wait_poll'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:154:in `internal_poll'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:278:in `internal_poll'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:148:in `block in poll'", "/app/vendor/ruby-2.4.4/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:158:in `synchronize'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:148:in `poll'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:747:in `acquire_connection'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:500:in `checkout'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:374:in `connection'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `retrieve_connection'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:116:in `retrieve_connection'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:88:in `connection'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/associations/join_dependency.rb:96:in `initialize'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/query_methods.rb:1016:in `new'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/query_methods.rb:1016:in `build_join_query'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/query_methods.rb:1003:in `build_joins'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/query_methods.rb:942:in `build_arel'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/query_methods.rb:918:in `arel'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation.rb:678:in `exec_queries'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation.rb:546:in `load'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation.rb:255:in `records'", "/app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/relation/delegation.rb:39:in `each'", "/app/app/workers/pos/refresh_menu_worker.rb:19:in `perform'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:185:in `execute_job'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:167:in `block (2 levels) in process'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/middleware/chain.rb:128:in `block in invoke'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/middleware/chain.rb:133:in `invoke'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:166:in `block in process'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:137:in `block (6 levels) in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/job_retry.rb:98:in `local'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:136:in `block (5 levels) in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/rails.rb:42:in `block in call'", "/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/execution_wrapper.rb:85:in `wrap'", "/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/reloader.rb:68:in `block in wrap'", "/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/execution_wrapper.rb:85:in `wrap'", "/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/reloader.rb:67:in `wrap'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/rails.rb:41:in `call'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:132:in `block (4 levels) in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:217:in `stats'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:127:in `block (3 levels) in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/job_logger.rb:8:in `call'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:126:in `block (2 levels) in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/job_retry.rb:73:in `global'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:125:in `block in dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/logging.rb:48:in `with_context'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/logging.rb:42:in `with_job_hash_context'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:124:in `dispatch'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:165:in `process'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:83:in `process_one'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/processor.rb:71:in `run'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/util.rb:16:in `watchdog'", "/app/vendor/bundle/ruby/2.4.0/gems/sidekiq-5.2.1/lib/sidekiq/util.rb:25:in `block in safe_thread'"]
誰能建議該配置以適應最大連接?
Web dynos:4個dynos *每個進程3個客戶端連接= 12
worker:6個worker *(每個工人5個redis連接(默認)+並發設置為10)= 90
您可以在這里獲得很好的閱讀https://medium.com/appaloosa-store-engineering/you-should-revise-your-redis-max-connections-setting-8136f063c916
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.