Tomcat memori overflow pengaturan java_opts
Jawaban 1
Atur memori awal untuk startup Tomcat
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
Membuat pengaturan
3. Contoh, berikut ini memberikan referensi untuk menetapkan parameter Java JVM dalam lingkungan memori 1G:
Java_opts = " -server -xms800m -xmx800m
-Xx: Permsize = 64m -xx: maxNewSize = 256m -xx: maxpermsize = 128m -djava.awt.headless = true "
Java_opts = " -server -xms768m -xmx768m -xx: permsize = 128m -xx: maxpermsize = 256m -xx:
Newsize = 192m -xx: maxnewsize = 384m "
Catalina_opts = " -server -xms768m -xmx768m -xx: permsize = 128m -xx: maxpermsize = 256m
-Xx: newsize = 192m -xx: maxnewsize = 384m "
Linux:
catalina.sh di direktori /usr/local/apache-tomcat-5.5.23/bin
Ditambahkan: java_opts = ' -xms512m -xmx1024m'
Jika Anda ingin menambahkan "M", itu berarti bahwa itu adalah MB, jika tidak itu akan menjadi KB, dan akan ada memori yang tidak mencukupi saat memulai Tomcat.
-Xms: Nilai awal
-Xmx: Nilai maksimum
-Xmn: Nilai minimum
Windows
Bergabunglah di depan Catalina.bat
Atur java_opts = -xms128m -xmx350m
Jika Anda memulai Tomcat dengan startup.bat, pengaturan OK akan berlaku. Memori 200m akan dialokasikan dengan sukses.
Namun, jika Anda tidak menjalankan startup.bat untuk memulai Tomcat tetapi menggunakan layanan Windows System untuk memulai layanan Tomcat, pengaturan di atas tidak akan berlaku.
Artinya, atur java_opts = -xms128m -xmx350m tidak berfungsi. Jika Anda mengalokasikan 200m memori di atas, Anda akan menjadi ...
Layanan Windows menjalankan bin/tomcat.exe. Itu membaca nilai dalam registri, bukan pengaturan Catalina.bat.
Larutan:
Ubah registri hkey_local_machine/software/apache software foundation/tomcat service manager/tomcat5/parameter/javaoptions
Nilai aslinya adalah
-Dcatalina.home = "c:/apachegroup/tomcat 5.0"
-Djava.endorsed.dirs = "c:/apachegroup/tomcat 5.0/umum/disahkan"
-Xrs
Tambahkan -xms300m -xmx350m
Restart layanan tomcat, dan pengaturan mulai berlaku
Jawaban 2
Solusi masalah overflow memori JVM Tomcat
Kata kunci: solusi masalah overflow memori JVM Tomcat
Baru -baru ini, saya akrab dengan proyek yang telah dikembangkan selama beberapa tahun. Saya perlu port database dari MySQL ke Oracle. Pertama, arahkan koneksi JDBC ke MySQL, mengemasnya ke Tomcat, dan jalankan. Tidak ada masalah. Namun, ketika mengarahkan koneksi JDBC ke Oracle, Tomcat terus -menerus melempar kesalahan java.lang.outofmemoryError, Google Internet, pahami mekanisme operasi Tomcat, dan selesaikan masalahnya. Bagikan untuk referensi.
1. Pertama adalah: java.lang.outofmemoryError: Java Heap Space
menjelaskan:
Pengaturan ukuran tumpukan
Pengaturan tumpukan JVM merujuk pada pengaturan ruang memori yang dapat disediakan JVM selama program Java dijalankan. 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.
Kiat: Pesan pengecualian ini akan dilemparkan jika 98% dari waktu digunakan untuk GC dan ukuran tumpukan yang tersedia kurang dari 2%.
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.
Larutan:
Atur ukuran heap secara manual
Modifikasi tomcat_home/bin/catalina.bat dan tambahkan baris berikut ke "echo" menggunakan catalina_base: $ catalina_base ":
Kode Java
Setel java_opts =% java_opts% -server -xms800m -xmx800m -xx: maxnewsize = 256m
Setel java_opts =% java_opts% -server -xms800m -xmx800m -xx: maxnewsize = 256m
Atau memodifikasi catalina.sh
Tambahkan baris berikut ke "Echo" menggunakan catalina_base: $ catalina_base ":
Java_opts = "$ java_opts -server -xms800m -xmx800m -xx: maxnewsize = 256m"
2. Kedua: java.lang.outofmemoryError: Space Permgen
alasan:
Nama lengkap Ruang Permgen adalah ruang generasi permanen, yang mengacu pada area penyimpanan memori permanen. Memori ini terutama disimpan oleh JVM di kelas dan informasi meta. Kelas akan ditempatkan di ruang Permgen saat dimuat. Ini berbeda dari area heap di mana instance kelas (instance) disimpan. GC (Pengumpulan Sampah) tidak akan membersihkan ruang Permgen selama runtime program utama. Oleh karena itu, jika ada banyak kelas dalam aplikasi Anda, sangat mungkin bahwa kesalahan ruang Permgen akan terjadi. Kesalahan ini biasa terjadi ketika server web memperkirakan 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.
Larutan:
1. Atur secara manual ukuran maxpermssize
Ubah tomcat_home/bin/catalina.bat (catalina.sh di bawah linux), dalam kode java
"Echo" menggunakan catalina_base: $ catalina_base "" menambahkan baris berikut:
Setel java_opts =% java_opts% -server -xx: permsize = 128m -xx: maxpermsize = 512m
"Echo" menggunakan catalina_base: $ catalina_base "" menambahkan baris berikut:
Setel java_opts =% java_opts% -server -xx: permsize = 128m -xx: maxpermsize = 512m
Catalina.sh adalah:
Kode Java
Java_opts = "$ java_opts -server -xx: permsize = 128m -xx: maxpermsize = 512m"
Java_opts = "$ java_opts -server -xx: permsize = 128m -xx: maxpermsize = 512m"
Saya juga melihat posting lain dan berpikir itu sangat bagus. Kutipan adalah sebagai berikut:
Analisis java.lang.outofmemoryError: Ruang Permgen
Saya menemukan bahwa banyak orang mengaitkan masalah dengan: Spring, Hibernate, Tomcat, karena mereka menghasilkan kelas secara dinamis, menyebabkan tumpukan permanen di JVM meluap. Lalu ada banyak pendapat berbeda tentang solusi. Beberapa orang mengatakan bahwa meningkatkan versi Tomcat ke yang terbaru bahkan tidak diperlukan Tomcat. Beberapa orang juga meragukan masalah musim semi, dan sangat panas di forum musim semi, karena menggunakan CBLIB di musim semi ketika AOP secara dinamis menghasilkan banyak kelas.
Tetapi pertanyaannya adalah mengapa masalah yang sama terjadi dengan open source kartu Trump ini, jadi apakah itu alasan yang lebih mendasar? Tomcat menjawab ini dengan cara yang sangat tidak jelas dalam tanya jawab. Kami tahu pertanyaan ini, tetapi pertanyaan ini muncul dari pertanyaan yang lebih mendasar.
Jadi seseorang memeriksa JVM yang lebih mendasar dan menemukan kunci masalah. Ternyata JVM Sun membagi memori menjadi area yang berbeda, salah satunya adalah area Permenter untuk menyimpan banyak kelas dan deskripsi kelas. Awalnya, ketika Sun dirancang, diyakini bahwa daerah ini sudah diperbaiki ketika JVM dimulai, tetapi dia tidak berharap bahwa dinamika akan begitu banyak digunakan sekarang. Selain itu, area ini memiliki mekanisme pengumpulan sampah khusus. Masalah saat ini adalah bahwa setelah secara dinamis memuat kelas ke area ini, GC tidak dapat mendaur ulangnya!
Untuk dua pertanyaan di atas, penanganan saya adalah:
Tambahkan baris pertama Catalina.bat:
Kode Java
Atur java_opts = -xms64m -xmx256m -xx: permsize = 128m -xx: maxnewsize = 256m -xx: maxpermsize = 256m
Atur java_opts = -xms64m -xmx256m -xx: permsize = 128m -xx: maxnewsize = 256m -xx: maxpermsize = 256m
Tambahkan baris pertama Catalina.sh:
Kode Java
Java_opts =
-Xms64m
-Xmx256m
-Xx: Permsize = 128m
-Xx: maxnewsize = 256m
-Xx: maxpermsize = 256m
Solusi sempurna untuk memori Tomcat meluap dalam artikel di atas adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.