2017-10-05 30 views
18

我將1個實例(2個vCPU,2GB RAM,加載〜4k req/sec)切換到Java 9(來自最新的Java 8)。有一段時間,一切都很好,CPU使用率與之前相同。但是,大約6小時後,CPU消耗無故增加4%(從21%增加到25%)。我沒有流量高峯, 沒有增加內存消耗,沒有度量變化(我有代碼內的每個方法的計數器)。沒有。爲什麼在Java 9 G1工作約6小時後性能會下降而沒有實際增加負載?

我離開這個實例約12小時,希望它恢復。但沒有任何改變。它開始消耗更多的CPU。

top命令顯示該實例比Java服務器進程通常具有更多的CPU峯值。我最近讀到G1不適合高吞吐量。所以我做出了一個結論,理由可能在G1。

我重新啓動實例與:

java -XX:+UseParallelGC -jar server-0.28.0.jar 

和〜20小時監測後,一切都很好像以前一樣。與之前相比,CPU消耗水平爲21%。

enter image description here

:7小時+12小時 「不變」(7D比例)後

enter image description here

CPU增加:爪哇9部署(6H比例)後

CPU的使用權CPU後 - XX:+UseParallelGC(24小時制):

enter image description here

所以我的問題是 - 是G1的預期行爲?其他人看到類似的東西?

的Ubuntu 16.04 64

java version "9" 
Java(TM) SE Runtime Environment (build 9+181) 
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode) 
+2

您是否碰巧在該時間點(6h刻度)看到GC日誌?本來可以排除對GC的懷疑*懷疑,並且有信心知道確切的原因。 – nullpointer

+0

沒有:(這是生產實例,所以我不想在那裏冒險 –

+3

是啊...沒有日誌這是任務不可能(除了猜測我認爲) – Eugene

回答

-4

我沒有一個明確的答案,但我們使用psi-probe監督我們的JVM(我們的應用程序容器 - Tomcat的8+使用JDK 1.8提供動態頁面),它可以爲您提供JVM內存利用率(Eden,Survivor,Old Gen等)以及CPU利用率的完美畫面,希望能夠幫助您看到您正在使用的垃圾收集器算法問題。

psi探頭易於部署到任何環境 - 無論是生產還是開發。如果我是你,我也會繼續,並且在你的DEVEL環境中啓用gc日誌記錄,並進行一些負載測試(在這種情況下,我總是將JMeter看作非常方便的工具 - 簡單但功能強大),以查看是否我可以複製這個問題。使用psi-probe實時推送不同的負載並觀察JVM行爲。

+0

此答案不提供非常有用的信息。 psi-probe用於tomcat,但OP沒有提及使用tomcat,並且一般專注於Java 9。 –

相關問題