2012-11-02 65 views
4

我無法弄清楚如何讓我的獨角獸工作人員在他們真正「準備好」處理請求時接受連接。我發現前幾個請求很慢,然後它們急劇加速(從幾秒到幾百毫秒)。這個問題似乎更加複雜的是獨角獸似乎在一定時間後殺死了工人,這意味着我經常面臨緩慢的第一次請求的性能打擊。有沒有其他人看過這個或有我能做什麼的想法?獨角獸工作人員的第一反應速度較慢幾秒

+0

請檢查該https://github.com/ooyala/barkeep/issues/237可能是它會幫助你。 –

+0

你是[預加載你的應用](http://unicorn.bogomips.org/Unicorn/Configurator.html#preload_app-method)? – dbenhur

+0

,因爲第一個請求還沒有被緩存,並且如果你再次發送請求,你將使用來自第一個請求的緩存查詢。 如果你想提高你的獨角獸性能,請檢查http://blog.railsonfire.com/2012/05/06/Unicorn-on-Heroku.html –

回答

6

事實證明,我們的i18n yml文件在第一次請求的視圖中被延遲加載導致性能問題。只需添加以下到我的配置/ unicorn.rb似乎已經解決了這個問題:

before_fork do |server, worker| 
    # The following is highly recomended for Rails + "preload_app true" as 
    # there's no need for the master process to hold a connection. 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 

    # No need to disconnect from Redis servers--they are connected to lazily. 

    # Force translations to be loaded into memory. 
    I18n.t('activerecord') 
end 
+2

可能是更好的代碼組織在rails初始化程序中執行'I18n.t('activerecord')'而不是隱藏在before_fork鉤子中。當獨角獸執行應用程序預加載時,初始化程序會運行前叉。 – dbenhur

+0

@dbenhur啊,很好的電話,謝謝! –

+0

謝謝!我從來沒有想到會發現這一點。看起來,這並不適用於我的初始化程序。 –