2011-06-14 23 views
0

我們已經注意到以下問題:只要我們的Tomcat JVM執行完整的GC,就會在LB ant和Tomcat之間創建連接的請求失敗。這是非常有問題的,因爲所有這些請求都不會有機會到達應用程序服務器。垃圾回收期間我們的負載均衡器和Tomcat之間的SocketException

即使我們將一個Tomcat指向另一個沒有任何LB之間,也會出現此問題。

在JVM/Tomcat/Linux中是否有任何定義可以使HTTP連接等待GC結束並且應用程序JVM將接收請求的時間。

我們使用Java6,Tomcat7和Linux Ubuntu操作系統。

感謝, Yosi

回答

0

你有沒有看着用用 'XX:+ UseConcMarkSweepGC' 併發垃圾收集器的選擇嗎?這實質上是在後臺執行垃圾收集,因此幾乎沒有(如果有的話)「停止整個世界」完整的GC。

+0

我已經嘗試過這些選項,按鈕行是完整的GC可能發生在某個時刻,我不想失去嘗試在此暫停期間連接的客戶端,這就是爲什麼我正在尋找TCP級別 – 2011-06-14 17:05:58

+0

儘管無法保證Full GC不會發生,但您可以在實踐中防止它們發生。首先,確保tomcat的堆大小合適。其次,您可以使用以下選項來觸發啓動後臺收集的點:-XX:CMSInitiatingOccupancyFraction = 。當堆的容量達到75%時,例如75的值將啓動後臺收集。 – btreat 2011-06-14 17:37:00

+0

您需要調整這兩個設置以確保XX:CMSInitiatingOccupancyFraction足夠低,以便在堆完全耗盡(否則爲完整的GC結果)之前後臺收集器有時間運行。 XX:CMSInitiatingOccupancyFraction還需要足夠高,以便在卸載系統時不會永久觸發後臺收集器。 – btreat 2011-06-14 17:40:24