2015-09-04 72 views
14

相關問題:Garbage collector usage when upgrade from Java 6 + Tomcat 6 to Java 8 + Tomcat 8內存分配行爲8

我有一組的webapps,與Java編譯8.如果我在Tomcat的運行8他們,我得到了很多未成年人的GC具有隨機內存分配的集合。在Tomcat 6中,內存分配更加線性穩定(在兩種情況下都是空閒的,沒有流量)。

伊甸空間的Tomcat 8:

enter image description here

enter image description here

伊甸空間的Tomcat 6:

enter image description here

enter image description here

你知道爲什麼會發生這種情況嗎?

EDIT 1:

這些來自生產環境與JDK 1.8和Tomcat 8.數據 CPU確實是高几乎總是由於GC週期。對此有何評論?

enter image description hereenter image description here

編輯2:

這是堆轉儲更新的時候通知(1.8GB轉儲):

enter image description here

+0

隨着更多的GC調用你使用更少的cpu。 –

+1

@GilianJoosen每個GC週期都需要CPU(請參閱cpu使用情況圖),內存泄漏可能會導致持續100%的CPU時間垃圾收集和不可用的服務器。 –

+1

在Tomcat 6和Tomcat 8之間的兩個主要版本中,答案會是「因爲他們改變了事情」。如果你有流量,會發生什麼,Tomcat不只是閒置(因爲這是真正重要的)。你內存不足了嗎? Tomcat 8會降低性能嗎? – Kayaman

回答

2

這伊甸空間,而不是終身空間。所以,這僅僅是個好消息。

但是,內存的這一步似乎是tomcat8在年輕GC之後立即分配了一些東西。它可能是一些'氣球'技術? (分配一個大的弱引用緩衝區來快速「放氣」以確保在存儲器壓力的情況下有一定空間)。它可能隱藏在NIO連接器中,就像在'oomParachute'參數中一樣(默認1MB,但是它是根據httpprocessor線程?如果你有200分鐘的線程,那將會匹配200MB看到的)。

我只會建議你鑽入更新日誌來尋找新的東西或你可能認爲他們像這樣的氣球機制一樣浪費地執行的改變。

另外:你應該在你的jdk8中運行tomcat6,看看它是否真的是tomcat8的錯。伊甸園的空間可以做得更大,以防G1GC過於激進,以至於在使用200MB時感覺GC有責任。

+0

感謝您的回答。 正如我在帖子中所說的,我在tomcat 6和tomcat 8上運行相同的應用程序。「extrange」行爲只發生在tomcat 8上。 我使用Javosize發現了問題,請看我的答案。 –

1

謝謝大家的時間。 最後,這個問題是tomcat 8.0_23中的一個bug。使用Javosize ,我看到了一個線程消耗幾乎所有CPU時間:

enter image description here

尋找在互聯網上,我發現這個Tomcat AJP Bug

在adittion,我測試過的tomcat 8.0_32和輪詢線程執行甚至不存在這樣的問題解決。

Regards