我將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%。
:7小時+12小時 「不變」(7D比例)後
CPU增加:爪哇9部署(6H比例)後
CPU的使用權CPU後 - XX:+UseParallelGC
(24小時制):
所以我的問題是 - 是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)
您是否碰巧在該時間點(6h刻度)看到GC日誌?本來可以排除對GC的懷疑*懷疑,並且有信心知道確切的原因。 – nullpointer
沒有:(這是生產實例,所以我不想在那裏冒險 –
是啊...沒有日誌這是任務不可能(除了猜測我認爲) – Eugene