Pertanyaan Mengapa ada penurunan kinerja setelah ~ 6 jam pekerjaan Java 9 G1 tanpa peningkatan beban yang sebenarnya?


Saya mengganti 1 instance (2 vCPU, RAM 2GB, memuat ~ 4k req / sec) ke Java 9 (dari Java 8 terbaru). Untuk sementara, semuanya baik-baik saja dan penggunaan CPU sama seperti sebelumnya. Namun, setelah ~ 6 jam konsumsi CPU meningkat 4% (dari 21% menjadi 25%) tanpa alasan. Saya tidak memiliki lonjakan lalu lintas, tidak ada konsumsi memori yang meningkat, tidak ada perubahan metrik (saya memiliki penghitung untuk setiap metode dalam kode). Tidak ada.

Saya membiarkan kejadian ini tidak tersentuh selama ~ 12 jam dan berharap ini akan kembali lagi. Tapi tidak ada yang berubah. Itu baru mulai mengkonsumsi lebih banyak CPU.

top perintah menunjukkan bahwa instance memiliki lonjakan CPU lebih dari biasanya untuk proses server Java. Saya membaca baru-baru ini bahwa G1 tidak cocok untuk throughput yang tinggi. Jadi saya membuat kesimpulan bahwa alasannya bisa di G1.

Saya memulai kembali instance dengan:

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

Dan setelah ~ 20 jam pemantauan, semuanya baik-baik saja seperti sebelumnya. Konsumsi CPU berada pada level 21% seperti beberapa hari sebelumnya.

Penggunaan CPU tepat setelah penyebaran Java 9 (skala 6h):

enter image description here

Peningkatan CPU setelah 7 jam + 12 jam "tak tersentuh" ​​(skala 7d):

enter image description here

CPU setelah -XX:+UseParallelGC (Skala 24h):

enter image description here

Jadi pertanyaan saya adalah - apakah itu perilaku yang diharapkan untuk G1? Adakah yang melihat sesuatu yang serupa?

Ubuntu 16.04 x64

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

32
2017-10-05 09:44


asal


Jawaban: