2014-01-31 61 views
5

我目前正面臨一個與乘客(4.0.18)結合使用簡單的Rails 4.0.0應用程序的問題。 問題是,啓動apache後,第一個請求非常慢(通常爲30x秒)。以下要求非常快速,但如果應用程序閒置20多秒,則會再次發生。現在乘客在啓動和幾秒鐘的空閒時間後緩慢

,總的來說這個問題已經在這裏討論了幾次,當然,我已經調整了Apache的配置:

PassengerSpawnMethod smart 
PassengerPoolIdleTime 1000 
RailsAppSpawnerIdleTime 0 
PassengerMaxRequests 1000 
PassengerMaxPreloaderIdleTime 0 

但這並沒有幫助的。如果我檢查乘客的狀態,它告訴我:

Version : 4.0.18 
Date : 2014-01-31 13:06:59 +0100 
Instance: 20601 
----------- General information ----------- 
Max pool size : 6 
Processes  : 1 
Requests in top-level queue : 0 

有趣的是,當我做一個「手錶」上乘客的狀態,而這樣做的請求,沒有什麼真正改變這裏。 (尤其是不是請求行)。

我已經用tcpdump搞清楚了,所有的請求都及時發送,所以沒有可見的網絡延遲。 我還啓用了apache擴展日誌記錄(添加了請求時間) - 這非常有趣,假設一個普通的請求需要大約200毫秒,然後其中一個慢速請求需要30.2秒。

任何想法這可能會導致什麼?

Apache是​​2.2.15。 (RedHat的版本,反向移植與安全補丁... :))

由於提前, 比約恩

回答

2

使用PassengerPreStart:http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerPreStart。該文檔部分還解釋了爲什麼你會遇到你所觀察到的行爲。

+0

嗨,感謝您的幫助 - 我已經嘗試過,但不幸沒有成功。我想知道的是,這應該至少爲第一個請求(通過「僞造」第一個請求)提供了幫助,但它在閒置一段時間之後不會對後續請求產生任何影響(我也遇到了問題) - 至少不會將PreloaderIdleTime和PoolIdletime設置爲0和1000.(因此所有進程都應該存活一段時間)。是否有一點我可以清楚地看到乘客進程何時由於某種超時或類似情況而被移除? – McSlow

+0

嘗試添加PassengerMinInstances指令。結合PassengerPreStart,它應該解決您的問題。參考:http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances – niiru

+0

嗨,感謝您的幫助。我終於找出問題所在。首先:兩條指令都需要消除最初的延遲。這工作正常。隨後的延遲問題是一個完全不同的故事:apache httpd安裝了一個「GetAccess」模塊,它是一些非常專有的中央授權軟件,其中一個後端服務器造成了一些麻煩,沒有人注意到它。最後通過增加並檢查乘客日誌(該請求及時到達apache訪問日誌,但在30秒後由乘客處理....) – McSlow

相關問題