Ответ 1
У нас были такие проблемы с Unicorn в течение некоторого времени., мы также получаем случайные ошибки таймаута, хотя мы никогда не видим большой нагрузки и имеем 4 динамика с 4 рабочими каждый (у нас никогда не было очереди запросов). Нам удавалось избавиться от этих ошибок, даже с помощью Heroku. Я чувствую, что даже они не на 100% уверены в оптимальных настройках для Единорога на Героку.
Мы только недавно перешли на Puma, и до сих пор такая хорошая, намного лучшая производительность и никаких лишних тайм-аутов. Одной из других причин, по которым мы перешли на Puma, является то, что я подозреваю, что некоторые из наших случайных тайм-аутов исходят от "медленных клиентов"., Unicorn не предназначен для обработки медленных клиентов.
Я сообщу вам, если мы увидим продолжение успеха с Puma, но пока все хорошо. Переключатель довольно безболезненен, если ваше приложение является потокобезопасным.
Вот настройки puma, которые мы используем. Мы используем "Clustered Mode".
PROCFILE:
web: bundle exec puma -p $PORT -C ./config/puma.rb
puma.rb:
environment ENV['RACK_ENV']
threads Integer(ENV["PUMA_THREADS"] || 5),Integer(ENV["PUMA_THREADS"] || 5)
workers Integer(ENV["WEB_CONCURRENCY"] || 4)
preload_app!
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end
В настоящее время для WEB_CONCURRENCY
установлено значение 4 и PUMA_THREADS
установлено значение 5.
Мы не используем инициализатор для DB_POOL, просто используя настройку по умолчанию DB_POOL по умолчанию 5 (следовательно, 5 потоков).
Единственная причина, по которой мы используем WEB_CONCURRENCY
в качестве имени переменной среды, так что log2viz сообщает о правильном количестве рабочих. Скорее назовет его PUMA_WORKERS
, но что угодно, а не огромная сделка.
Надеюсь, это поможет., снова, сообщит вам, если мы увидим какие-либо проблемы с Puma.