10 Pilihan JVM Penting untuk Sistem Aplikasi Aplikasi JAWA Produksi

Mengenal opsi-opsi JVM (Java Virtual Machine) yang penting untuk kinerja dan debugging yang lebih baik.


Jika Anda seorang pengembang Java atau administrator middleware, maka Anda harus tahu apa arti opsi JVM beserta kepentingannya, dan bagaimana pengaruhnya terhadap aplikasi Anda. Ayo cari tahu mereka.

Ikhtisar Opsi JVM

Berbicara tentang opsi JVM, maka ada tiga jenis opsi yang dapat Anda sertakan ke JVM Anda, opsi standar, non-standar, dan lanjutan. Jika Anda mencoba opsi lanjutan, Anda selalu menggunakan opsi dengan -XX. Demikian pula, jika Anda menerapkan opsi non-standar, Anda menggunakan -X. Opsi standar tidak perlu menambahkan apa pun pada opsi.

Opsi JVM mana yang digunakan oleh aplikasi Anda?

Jika aplikasi ini berjalan di Linux, Anda dapat menggunakan ps -ef | grep java untuk mengidentifikasi proses Java dan melihat opsi JVM yang dicetak sebagai argumen proses. Jika lebih dari satu proses Java berjalan di sistem, maka Anda mungkin perlu menggunakan kata kunci yang unik untuk aplikasi Java Anda.

Jika argumen Anda terlalu panjang, maka coba gunakan ps -auxww karena perintah ini juga akan menampilkan daftar argumen yang panjang.

Setelah memiliki daftar flag JVM, Anda bisa mendapatkan ide tentang perilaku aplikasi Java apa pun, mis., Tomcat.

Ukuran tumpukan Java

 -Xms – mengatur ukuran heap Java awal
-Xmx – mengatur ukuran heap Java maksimum
-Xss – mengatur ukuran tumpukan ulir java

-Xms – Opsi ini adalah untuk menentukan ukuran tumpukan awal untuk JVM, mis., Xms2048m yang berarti ukuran tumpukan awal JVM sekitar 2 GB. Jadi, ketika JVM dimulai, memori tumpukan akan sebesar ini. Anehnya ya! Ini dilakukan untuk mencegah pengubahan ukuran selama startup dan meningkatkan waktu startup JVM.

-Xmx – Opsi ini adalah untuk menentukan ukuran tumpukan maksimum JVM, mis., Xmx2048m yang berarti ukuran tumpukan maksimum JVM hanya 2 GB..

Anda pada dasarnya akan selalu memiliki-Xmsand-Xmx bersama.

Atur Persentase tumpukan

-XX: MaxHeapFreeRatio – mengatur persentase maksimum tumpukan bebas setelah GC untuk menghindari penyusutan.

-XX: MinHeapFreeRatio – Menetapkan persentase minimum tumpukan bebas setelah GC untuk menghindari ekspansi; untuk memantau penggunaan tumpukan, Anda dapat menggunakan JCosole.

Aktifkan berbagi data kelas

Tentukan opsi Xshareclasses untuk mengaktifkan berbagi data kelas dalam cache kelas bersama. JVM terhubung ke cache yang ada atau membuat cache jika tidak ada. Anda dapat memiliki banyak cache, dan Anda dapat menentukan cache yang benar dengan menambahkan suboption ke opsi -Xshareclasses.

Ukuran PermGen

Opsi JVM sebelumnya menentukan ukuran memori tumpukan tetapi -XX: PermSize adalah untuk menentukan ukuran ruang PermGen, tempat kumpulan string dan metadata kelas disimpan. Opsi ini sangat efektif untuk server web seperti Tomcat, yang sering memuat kelas aplikasi web selama penyebaran.

Ngomong-ngomong, Perlu disadari bahwa ruang PermGen diambil alih oleh Metaspace di Java 8, dan opsi ini tidak berlaku jika Anda menjalankan dengan JRE 8 JVM.

Cetak GC

-verbose: gc – pengumpul sampah berjalan dan berapa lama waktu yang dibutuhkan.
-XX: + PrintGCDetails – termasuk data dari -verbose: gc tetapi juga menambahkan informasi tentang ukuran generasi baru dan timing yang lebih akurat.
-XX: -PrintGCTimeStamps – Cetak stempel waktu di pengumpulan sampah.

Opsi JVM ini digunakan untuk mengaktifkan logging pengumpulan sampah, yang sangat efektif untuk operasi yang sensitif terhadap latensi. Kami dulu menggunakan sistem tempat kami mencari latensi mikrodetik, dan jika Anda tahu, pengumpulan sampah besar dapat berlangsung beberapa milidetik.

Jadi, kami menggunakan arsitektur bebas GC seperti LMAX disruptor, tetapi memang jika Anda tidak menggunakan aplikasi yang sangat sensitif terhadap latensi, opsi praktis ini akan memberi tahu Anda statistik penting GC. Ini akan memberi Anda apakah itu pengumpulan sampah besar atau kecil, jenis pemulung mana yang diterapkan, seberapa sering memori dipulihkan, dan berapa banyak waktu yang dipegang, dll.

Menangani Kesalahan ‘OutOfMemory’

Untuk memicu tumpukan tumpukan kehabisan memori, Anda dapat menggunakan -XX: + HeapDumpOnOutOfMemoryError

Opsi JVM ini menghasilkan tumpukan tumpukan ketika JVM Anda mati dengan Kesalahan OutOfMemory. Tidak ada biaya yang terlibat kecuali jika OOM benar-benar terjadi. Bendera ini adalah syarat untuk sistem produksi karena biasanya satu-satunya cara untuk menentukan masalah secara mendalam.

Tumpukan tumpukan akan diatur di “direktori saat ini” dari JVM secara default. Jika Anda ingin membuat heap dump pada direktori tertentu, jalankan

-XX: HeapDumpPath = [path-to-heap-dump-directory]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

File dump heap bisa berukuran sangat besar, hingga gigabyte, jadi pastikan sistem file target memungkinkan kapasitas yang cukup.

Jika kita ingin me-restart server segera setelah kehabisan memori, maka kita dapat mengatur parameter ini dengan tujuan yang sama –

XX: OnOutOfMemoryError ="shutdown -r"

Lacak classloading dan unloading

-XX: + TraceClassLoading dan -XX: + TraceClassUnloading adalah dua opsi JVM yang kami gunakan untuk mencetak informasi logging kapan pun kelas memuat ke JVM atau membongkar dari JVM. Bendera JVM ini berguna jika Anda memiliki segala jenis kebocoran memori yang terkait dengan classloader dan mencurigai bahwa kelas tidak membongkar atau mengumpulkan sampah.

Classpath Jawa

Berbicara tentang JAVA Classpath lalu-Xbootclasspath menentukan entri classpath yang ingin kita muat tanpa verifikasi. JVM memverifikasi semua kelas yang dimuat untuk memastikan bahwa ia tidak mencoba untuk mereduksi objek dengan int, pop entri tambahan dari tumpukan atau mendorong terlalu banyak, dan sebagainya. 

Menempatkan kelas di bootclasspath melewatkan biaya juga, tetapi seharusnya hanya digunakan ketika Anda tahu bahwa kelas telah diverifikasi berkali-kali sebelumnya. Di JRuby, ini mengurangi waktu startup hingga setengah dan lebih banyak untuk skrip sederhana.

Pembuatan profil

Java Profiling adalah proses pemantauan berbagai parameter level JVM seperti Eksekusi Metode, Eksekusi Thread, Koleksi Sampah, dan Pembuatan Objek. Java Profileing memberi Anda pandangan yang lebih baik tentang eksekusi aplikasi target Anda dan pemanfaatan sumber dayanya.

-Xprof
-Xrunhprof

Lingkungan 64-bit

Di lingkungan OS di mana paket 32 ​​dan 64-bit diinstal, JVM secara otomatis memilih paket lingkungan 32-bit sebagai standar.

Jika kita ingin mengatur lingkungan ke 64 bit secara manual, kita dapat melakukannya menggunakan parameter -d. Dan jelas, bit OS bisa 32 atau 64.

Kesimpulan

Saya harap ini membantu Anda untuk mengkonfigurasi parameter JVM untuk aplikasi Anda. Jika Anda tertarik untuk mempelajari secara mendalam tentang manajemen memori java, lihat ini Udemy tentu saja.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map