Pengalaman menggunakan ZGC dan Shenandoah GC dalam produksi

Seperti penyedia layanan informasi yang memadai, kami memahami bahwa waktu respons sistem adalah faktor yang sangat penting untuk menciptakan pengalaman pengguna yang positif. Selain itu, kecepatan operasi yang tinggi memungkinkan untuk menggunakan kapasitas server yang lebih padat, dan, karenanya, mengurangi biaya pusat data.

Tapi, ada satu "tetapi": CRM kami - SalesMax - ditulis dalam java, dan, oleh karena itu, jeda yang terkait dengan pekerjaan pemulung secara berkala terjadi. Sampai baru-baru ini, ini adalah kejahatan tak terhindarkan yang harus Anda hadapi.

Maka, Oracle mengumumkan pengumpul sampah baru - ZGC. Menurut pengumuman awal, ia seharusnya menyelesaikan masalah pembekuan aplikasi java - jeda yang dideklarasikan tidak boleh melebihi 100 ms bahkan pada tumpukan multi-gigabyte. Dengan penggunaan memori maksimum 6GB, semuanya akan baik-baik saja.

Jadi mari kita mulai.

Tambahkan baris ke standalone.conf dari server aplikasi wildfly

JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseZGC" 

Kami memulai sistem, menjalankan tes beban.

Pada pandangan pertama, semuanya berfungsi seperti yang dinyatakan, jeda untuk pengumpulan sampah benar-benar menurun.

Tanpa ragu-ragu, diputuskan untuk mencoba pengumpul sampah baru di salah satu server produk. Kami memilih yang paling sedikit dimuat, dikonfigurasi, diluncurkan, mulai mengamati.
Pada awalnya, semuanya bekerja dengan baik, secara umum, mereka memutuskan bahwa percobaan itu berhasil.

Jadi, Sabtu malam. Kami dengan tenang bermain biliar, waktu setelah tengah malam. Panggilan dari manajer: CRM tidak berfungsi untuk klien.

Periksa - klien dari server yang sama. Saya meletakkan telepon di tangan saya, buka Termius, coba sambungkan ke server melalui ssh - diam ... Sedikit saja, setelah sekitar 20 detik, yang pada saat itu terasa seperti selamanya, tetapi saya masih bisa masuk. Dan apa yang kita lihat? Meskipun pembatasan -Xmx6144M diatur dalam parameter startup, proses java menggunakan semua memori yang tersedia. Setelah beberapa waktu, sistem benar-benar mematikan proses ini.

Jadi, penggunaan ZGC harus dinonaktifkan. Pekerjaan sistem CRM segera kembali normal. Tampaknya tidak ada yang bisa dilakukan, kami akan menunggu sampai semuanya selesai di Oracle.

Tetapi, setelah beberapa waktu, sebuah artikel menarik perhatian saya di mana penulis membagikan pengalaman positif menggunakan pengumpul sampah lainnya - Shenandoah, yang pengembangnya memiliki tujuan yang persis sama, yaitu: mengurangi waktu penghentian fase dunia dalam pengumpul sampah.

Kami memutuskan: mengapa tidak?

Setelah menemukan halaman tempat Anda dapat mengunduh JDK yang telah dikompilasi sebelumnya - https://builds.shipilev.net/ , kami mulai menguji: kami menambahkan kunci baru ke standalone.conf:

  JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC" 

Kali ini, pengujian menunjukkan bahwa semuanya, secara umum, tidak masalah. Dan jeda untuk pengumpulan sampah berkurang, dan, yang terpenting, peningkatan konsumsi memori yang tidak terduga berhenti. Semuanya bekerja dengan sempurna dalam produksi.

Kesimpulan apa yang bisa ditarik? Saya mengerti bahwa Oracle juga berkembang, dan kesulitan yang kami temui pada Oktober 2019 mungkin sudah diperbaiki, dan ZGC akan segera diberi kesempatan kedua. Tetapi pada saat ini, secara pribadi, kami memilih Shenandoah GC, dan tidak menyesalinya.

Source: https://habr.com/ru/post/id477692/


All Articles