1. Koleksi Masalah Pengaturan Memori Tomcat
Saat menggunakan program Java untuk menanyakan sejumlah besar data dari database atau memuat paket JAR dengan server aplikasi (seperti Tomcat, JBoss, WebLogic) akan muncul. Pengecualian Java.lang.outofmemoryError akan muncul. Ini terutama disebabkan oleh memori yang tidak mencukupi di server aplikasi. Pengecualian ini sering memiliki situasi berikut (mengambil lingkungan Tomcat sebagai contoh, server web lain seperti JBoss, WebLogic, dll. Adalah sama):
1. Java.lang.outofmemoryError: Ruang Permgen
Nama lengkap Ruang Permgen adalah ruang generasi permanen, yang mengacu pada area penyimpanan permanen memori OutofmemoryError: Ruang Permgen. Dari perspektif teks, itu adalah overflow memori, dan solusinya adalah meningkatkan memori. Mengapa memori meluap? Ini karena memori ini terutama disimpan oleh JVM di kelas dan informasi meta. Kelas ditempatkan di area ruang Permgen saat dimuat. Berbeda dari area tumpukan di mana instance disimpan. GC (Koleksi Sampah) tidak akan membersihkan ruang Permgen selama program utama. Oleh karena itu, jika aplikasi Anda akan memuat banyak kelas, sangat mungkin bahwa kesalahan ruang Permgen akan terjadi. Kesalahan ini biasa terjadi ketika server web pra-kompilasi JSP. Jika Anda menggunakan sejumlah besar stoples pihak ketiga di bawah aplikasi web Anda, ukurannya melebihi ukuran default JVM (4m), maka pesan kesalahan ini akan dihasilkan.
Solusi: Atur ukuran maxpermsize secara manual
A. Jika Tomcat dimulai dalam mode kelelawar, pengaturan berikut adalah:
Ubah tomcat_home/bin/catalina.sh
Tambahkan baris berikut ke "Echo" menggunakan catalina_base: $ catalina_base ":
Java_opts = " -server -xx: permsize = 64m -xx: maxpermsize = 128m
B. Jika Tomcat terdaftar sebagai Layanan Windows dan dimulai di Layanan, nilai kunci yang sesuai dalam registri perlu dimodifikasi.
Buka registri dan temukan direktori hkey_local_machine/software/apache software foundation/procrun 2.0/htfty/parameter/java. Merah bertanda (seperti HTFTY) di alamat direktori perlu dimodifikasi sesuai dengan situasi yang berbeda, dan mendaftarkan layanan Tomcat sebagai nama layanan Windows. Anda dapat melihat item JVMMS dan JVMMX, di mana JVMMs mengatur parameter penggunaan memori terkecil, dan JVMMX menetapkan parameter penggunaan memori terbesar. Atur nilai -nilai item JVMM dan JVMMX, dan restart server Tomcat agar berlaku.
Rekomendasi: Pindahkan file JAR pihak ketiga yang sama ke direktori Tomcat/Shared/Lib, sehingga dapat mengurangi penggunaan memori berulang dari dokumen JAR.
2. Java.lang.outofmemoryError: Java Heap Space
Pengaturan tumpukan JVM merujuk pada pengaturan ruang memori yang dapat disediakan JVM selama operasi program Java. Ketika JVM dimulai, itu akan secara otomatis mengatur nilai ukuran tumpukan. Ruang awalnya (mis. -Xms) adalah 1/64 memori fisik, dan ruang maksimum (-xmx) adalah 1/4 dari memori fisik. Anda dapat menggunakan -xmn -xms -xmx dan opsi lain yang disediakan oleh JVM untuk mengaturnya. Ukuran ukuran tumpukan adalah jumlah generasi muda dan generasi bertenor. Pesan pengecualian ini akan dilemparkan jika 98% dari waktu digunakan untuk GC dan ukuran tumpukan yang tersedia kurang dari 2%.
Solusi: Setel ukuran heap secara manual
A. Jika Tomcat dimulai dalam mode kelelawar, pengaturan berikut adalah:
Ubah tomcat_home/bin/catalina.sh
Tambahkan baris berikut ke "Echo" menggunakan catalina_base: $ catalina_base ":
Java_opts = " -server -xms800m -xmx800m -xx: maxnewsize = 256m"
B. Jika Tomcat terdaftar sebagai Layanan Windows dan dimulai di Layanan, nilai kunci yang sesuai dalam registri perlu dimodifikasi.
Buka registri dan temukan direktori hkey_local_machine/software/apache software foundation/procrun 2.0/htfty/parameter/java. Merah bertanda (seperti HTFTY) di alamat direktori perlu dimodifikasi sesuai dengan situasi yang berbeda, dan mendaftarkan layanan Tomcat sebagai nama layanan Windows. Anda dapat melihat item JVMMS dan JVMMX, di mana JVMMs mengatur parameter penggunaan memori terkecil, dan JVMMX menetapkan parameter penggunaan memori terbesar. Atur nilai -nilai item JVMM dan JVMMX, dan restart server Tomcat agar berlaku.
Tip: Ukuran tumpukan maksimum tidak boleh melebihi 80% dari memori fisik yang tersedia. Secara umum, atur opsi -xms dan -xmx ke tempat yang sama, sedangkan -xmn adalah 1/4 dari nilai -xmx.
2. Tomcat sendiri tidak dapat berjalan langsung di komputer, dan perlu mengandalkan sistem operasi berdasarkan perangkat keras dan mesin virtual Java. Ketika program Java dimulai, JVM akan mengalokasikan memori awal dan memori maksimum untuk aplikasi. Memori awal dan memori maksimum ini akan mempengaruhi kinerja program sampai batas tertentu. Misalnya, ketika aplikasi menggunakan memori maksimum, JVM harus terlebih dahulu melakukan pengumpulan sampah dan melepaskan beberapa memori yang ditempati. Oleh karena itu, jika Anda ingin menyesuaikan memori awal dan memori maksimum Tomcat saat memulai, Anda perlu mendeklarasikannya ke JVM. Secara umum, program JAVA dapat menyesuaikan memori awal dan memori maksimum aplikasi melalui -xms -xmx saat menjalankan: ukuran kedua nilai ini umumnya ditetapkan sesuai dengan kebutuhan. Ukuran heap inisialisasi mengeksekusi ukuran memori permintaan mesin virtual ke sistem saat startup. Secara umum, parameter ini tidak penting. Namun, beberapa aplikasi akan dengan cepat menempati lebih banyak memori di bawah beban besar. Saat ini, parameter ini sangat penting. Jika memori yang digunakan diatur untuk menjadi kecil ketika mesin virtual dimulai dan banyak objek diinisialisasi dalam kasus ini, mesin virtual harus berulang kali meningkatkan memori untuk memenuhi penggunaan. Untuk alasan ini, kami umumnya mengatur -xms dan -xmx menjadi ukuran yang sama, dan nilai maksimum heap dibatasi oleh memori fisik yang digunakan oleh sistem. Secara umum, aplikasi dengan sejumlah besar data akan menggunakan objek persisten, dan penggunaan memori dapat tumbuh dengan cepat. Ketika memori yang dibutuhkan oleh aplikasi melebihi nilai maksimum heap, mesin virtual akan mendorong overflow memori dan menyebabkan layanan aplikasi macet. Oleh karena itu, umumnya disarankan untuk menetapkan nilai maksimum tumpukan hingga 80% dari nilai maksimum memori yang tersedia.
Tomcat dapat menggunakan memori secara default adalah 128MB. Dalam proyek aplikasi yang lebih besar, memori ini tidak cukup dan perlu ditingkatkan. Ada beberapa cara untuk memilih:
Metode pertama:
Di bawah Windows, di file /bin/catalina.bat, unix, di depan file /bin/catalina.sh, tambahkan pengaturan berikut:
Java_opts = '-xms 【inisialisasi ukuran memori】 -xmx 【memori maksimum yang dapat digunakan】'
Nilai -nilai dari kedua parameter ini perlu ditingkatkan. Misalnya:
Java_opts = ' -xms256m -xmx512m'
Ini berarti bahwa memori inisialisasi adalah 256MB dan memori maksimum yang dapat digunakan adalah 512MB.
Metode kedua: Atur nama variabel dalam variabel lingkungan: java_opts nilai variabel: -xms512m -xmx512m
Metode ketiga: Dua metode pertama ditujukan untuk situasi di mana Catalina.bat ada di direktori nampan (seperti tomcat yang secara langsung didekompresi, dll.), Tetapi beberapa versi instalasi Tomcat tidak memiliki Catalina.bat. Pada saat ini, metode berikut dapat digunakan. Tentu saja, metode ini juga merupakan metode yang paling umum: buka tomcathome // bin // tomcat5w.exe, klik pada tab java, dan Anda akan menemukan bahwa ada dua item: kumpulan memori awal dan kumpulan memori maksimum. Kumpulan memori inisial Ini adalah ukuran memori dari pengaturan inisialisasi. Kumpulan memori maksimum Ini adalah ukuran memori maksimum. Setelah pengaturan pengaturan, tekan OK dan restart Tomcat. Anda akan menemukan bahwa memori yang tersedia untuk JVM di Tomcat telah berubah.
Hal lain yang perlu dipertimbangkan adalah mekanisme pengumpulan sampah yang disediakan oleh Java. Ukuran tumpukan mesin virtual menentukan waktu dan frekuensi pengeluaran mesin virtual untuk mengumpulkan sampah. Kecepatan pengumpulan sampah yang dapat diterima terkait dengan aplikasi dan harus disesuaikan dengan menganalisis waktu dan frekuensi pengumpulan sampah yang sebenarnya. Jika ukuran tumpukan besar, maka pengumpulan sampah lengkap akan lambat, tetapi frekuensinya akan berkurang. Jika Anda membuat ukuran tumpukan konsisten dengan kebutuhan memori, koleksi lengkap akan cepat, tetapi akan lebih sering. Tujuan mengubah ukuran tumpukan adalah untuk meminimalkan waktu pengumpulan sampah untuk memaksimalkan pemrosesan permintaan pelanggan dalam waktu tertentu. Selama benchmarking, untuk memastikan kinerja terbaik, ukuran tumpukan harus diatur untuk menjadi besar untuk memastikan bahwa pengumpulan sampah tidak terjadi selama seluruh proses pembandingan. Jika sistem menghabiskan banyak waktu mengumpulkan sampah, kurangi ukuran tumpukan. Koleksi sampah lengkap tidak boleh melebihi 3-5 detik. Jika pengumpulan sampah menjadi hambatan, maka ukuran generasi perlu ditentukan, output rinci pengumpulan sampah diperiksa, dan dampak parameter pengumpulan sampah pada kinerja dipelajari. Secara umum, Anda harus menggunakan 80% memori fisik sebagai ukuran tumpukan. Saat menambahkan prosesor, ingatlah untuk meningkatkan memori, karena alokasi dapat dilakukan secara paralel, sementara pengumpulan sampah tidak secara paralel.
Satu hal yang perlu diperhatikan: disarankan untuk mempersempit perbedaan antara nilai tertinggi dan nilai terendah, jika tidak banyak memori akan terbuang. Nilai terendah meningkat, dan nilai tertinggi dapat ditetapkan sesuka hati, tetapi harus didasarkan pada memori fisik yang sebenarnya. Jika pengaturan memori terlalu besar, misalnya, memori maksimum diatur, tetapi jika tidak ada memori 512m yang tersedia, Tomcat tidak dapat dimulai. Mungkin ada situasi di mana memori didaur ulang oleh sistem dan mengakhiri prosesnya.
Metode di atas menerapkan overflow memori Tomcat dan penyesuaian ukuran adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.