我们在Heroku上经常遇到超时错误。当我们查看日志以找到有关其原因的一些线索时,我们找不到很好的理由。这些超时通常不是在最繁忙的时间发生,而是在随机时间发生。
我们将puma
用作Web服务器,并将sidekiq
用作后台作业处理器。
我们对彪马的配置是; MAX_THREADS=60
,WEB_CONCURRENCY=1
。
我们对sidekiq的配置是; WORKER_CONCURRENCY=8
。
我们正在为工作人员和网络使用single Standard-2x
测功机。
我们正在使用standard-0
连接限制的120
posgresql软件包。我们具有DB_POOL=60
配置,用于将相同的数字与线程数进行匹配。使用这些配置,我们不会使用所有连接。
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
从我们的指标中可以看到,它发生在某些随机时间,而不是在我们收到更多请求的最繁忙时间。
让我们超时的原因可能是什么?谢谢您的帮助。