好的,這是一系列非常繁忙的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分鐘,沒有明顯的模式。
我開始認爲這兩個設置不會像我認爲的那樣相互影響。對此有何洞察?和/或「最佳實踐」方法,以確保在這種情況下偶爾回收兒童流程?
你有沒有什麼好運算出來? – Eric
不是。在這裏(顯然)沒有迴應。 –