我需要一些幫助,在我的RoR4 Heroku應用程序上配置Puma(多線程+多核服務器)。 Heroku的文檔並不是最新的。我遵循這個:Concurrency and Database Connections的配置,它沒有提到集羣的配置,所以我不得不同時使用兩種類型(線程和多核)。Heroku上的美洲獅羣集配置
我目前的配置:
./Procfile
web: bundle exec puma -p $PORT -C config/puma.rb
./config/puma.rb
environment production
threads 0,16
workers 4
preload_app!
on_worker_boot do
ActiveRecord::Base.connection_pool.disconnect!
ActiveSupport.on_load(:active_record) do
config = Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || 5
ActiveRecord::Base.establish_connection
end
end
問題:
a)是否需要像Unicorn那樣的before_fork/after_fork配置,因爲Cluster worker是分叉的?
b)如何調整我的線程數取決於我的應用程序 - 將其放下的原因是什麼? /在什麼情況下會有所作爲?是不是0:16已經優化?
c)Heroku數據庫允許500個連接。取決於線程,工作人員和動態計數,DB_POOL的值是多少? - 平行工作時,每個測功機每個工作線程的每個線程都需要唯一的數據庫連接嗎?
總的來說:我的配置對於併發性和性能應該如何?
說到調整線程數。我閱讀了關於Unicorn工作調優的教程,該教程建議運行「ab」並增加工作者數(在您的案例中爲線程),直到性能下降(請求需要更多時間完成)爲止。這是很好的承擔了相當的動態網頁,並查看請求如何不同/併發比例首先採取行動(也有記住,如果你做多的要求Heroku上可能會打斷您懷疑DoS)的 –
@MichaelSzyndel所以我基本上第一次去,雖然每個工人,檢查性能,然後通過線程並再次檢查?這不取決於究竟是什麼要求? – Nikom
從我讀的地方Heroku有兩個核心(4個虛擬)每個測功機。每個測試程序擁有一個進程是最佳選擇,然後由您決定每個進程需要運行多少個線程。我會用ab來測試。請記住,如果您通過521MB的RAM,Heroku將發送警報,並在大於1GB時交換(與heroku文檔一起確認) –