Мы периодически получаем ошибки тайм-аута на Heroku. Когда мы просматриваем наши журналы, чтобы найти некоторые подсказки о том, что может быть причиной этого, мы не смогли найти вескую причину для этого. Эти тайм-ауты обычно происходят не в самые загруженные времена, а в случайные времена.
Мы используем puma
в качестве веб-сервера и sidekiq
в качестве фонового процессора.
Наши конфигурации для пумы есть; MAX_THREADS=60
, WEB_CONCURRENCY=1
.
Наша конфигурация для sidekiq: WORKER_CONCURRENCY=8
.
Мы используем single Standard-2x
dynos для рабочих и веб.
Мы используем standard-0
пакет posgresql с 120
пределом подключения. У нас есть DB_POOL=60
конфигурация для сопоставления того же номера с количеством потоков. С этими конфигурациями мы не используем все соединения.
puma.rb
thread_count = ENV.fetch("MAX_THREADS") { 5 }.to_i
threads thread_count, thread_count
port ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RACK_ENV") { "development" }
workers ENV.fetch("WEB_CONCURRENCY") { 1 }
preload_app!
before_fork do
ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
end
on_worker_boot do
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end
plugin :tmp_restart
Как вы можете видеть из наших показателей, это происходит в некоторые случайные моменты времени, а не в самые загруженные моменты, когда мы получаем больше запросов.
Какие могут быть некоторые потенциальные причины для нас, чтобы получить эти тайм-ауты? Спасибо за вашу помощь.