2015-05-06 54 views
1

好的,這是一系列非常繁忙的Apache 2.4服務器,使用AWS ELBs後面的prefork MPM。因爲我們支持ELB,所以沒有Keepalive是愚蠢的,但是,我們希望子流程能夠定期回收。在打開Keepalive之前,MaxConnectionsPerChild設置處理了此操作。但是對於Keepalive,基本上只有一個連接,所以MaxConnectionsPerChild會有些不起作用。 FWIW,服務器忙於KeepAliveTimeout或類似的事情 - 它們通常每秒鐘有幾百個請求,每週24/7,基本上沒有空閒時間。MaxKeepAliveRequests與MaxConnectionsPerChild之間的互動

此外,幾乎所有的請求都是原子的,沒有後續的圖像,CSS等請求。保持活動的真正原因是因爲所有連接都來自單一來源負載平衡器。

因此,這裏的問題......我們想,爲了偶爾回收子進程,我們可以使用的設置是這樣的:

KeepAlive    On 
KeepAliveTimeout  20 
MaxKeepAliveRequests 1500 
MaxConnectionsPerChild 4 

同樣,KeepAliveTimeout的已經基本沒有影響。所以我們的想法是,通過這種設置,每1500次請求就會重置持續連接,然後在4次重置後,孩子將被回收,即:每6000次請求回收子進程。但是,這導致兒童進程每分鐘回收一次,這與流量水平不相符。作爲一項測試,我們將設置更改爲:

KeepAlive    On 
KeepAliveTimeout  20 
MaxKeepAliveRequests 6000 
MaxConnectionsPerChild 4 

預計兒童壽命將增加四倍。然而,兒童進程現在每50秒鐘循環2分鐘,沒有明顯的模式。

我開始認爲這兩個設置不會像我認爲的那樣相互影響。對此有何洞察?和/或「最佳實踐」方法,以確保在這種情況下偶爾回收兒童流程?

+0

你有沒有什麼好運算出來? – Eric

+0

不是。在這裏(顯然)沒有迴應。 –

回答

0

看來你的KeepAlive不活躍。

我可以在我的Apache上看到,當我將MaxKeepAliveRequests從1500設置爲6000時,我的子生命週期增加了四倍(具有不變的請求率)。

  • 你確定KeepAlive在Apache上是活動的嗎? (默認:是)。
  • 確認負載平衡器'keepalive'處於活動狀態。
  • 您應驗證負載均衡器向Apache發送HTTP 1.1請求(Keepalive連接僅支持HTTP/1.1)。 你可以在日誌中看到它。