เหตุผล: ต่อไปนี้เป็นเรื่องธรรมดา:
1. จำนวนข้อมูลที่โหลดในหน่วยความจำมีขนาดใหญ่เกินไปเช่นรับข้อมูลมากเกินไปจากฐานข้อมูลในครั้งเดียว
2. มีการอ้างอิงถึงวัตถุในคลาสคอลเลกชันและจะไม่ถูกล้างหลังการใช้งานเพื่อให้ JVM ไม่สามารถรีไซเคิลได้
3. มีลูปตายในรหัสหรือลูปที่ให้การทำซ้ำมากเกินไป
4. ข้อบกพร่องในซอฟต์แวร์ของบุคคลที่สามที่ใช้;
5. ค่าหน่วยความจำของพารามิเตอร์เริ่มต้นถูกตั้งค่าเล็กเกินไป
พรอมต์ข้อผิดพลาดทั่วไป:
1.tomcat: java.lang.outofmemoryError: Permgen Space
2.tomcat: java.lang.outofmemoryError: พื้นที่ java heap
3. WebLogic: สาเหตุของ servletexception java.lang.outofMemoryError
4.resin: java.lang.outofMemoryError
5.java:java.lang.outofMemoryError
แก้ปัญหา:
1. โซลูชันของข้อผิดพลาดที่ได้รับแจ้งจากแอปพลิเคชันเซิร์ฟเวอร์: ตั้งค่าหน่วยความจำของพารามิเตอร์เริ่มต้นให้ใหญ่พอ
2. การแก้ปัญหาข้อผิดพลาดที่เกิดจากรหัส Java: มุ่งเน้นไปที่จุดต่อไปนี้:
1) ตรวจสอบว่ามีลูปที่ตายแล้วหรือการโทรแบบเรียกซ้ำในรหัส
2) ตรวจสอบว่ามีลูปขนาดใหญ่ที่สร้างเอนทิตีวัตถุใหม่ซ้ำ ๆ หรือไม่
3) ตรวจสอบว่ามีแบบสอบถามที่ได้รับข้อมูลทั้งหมดในแบบสอบถามฐานข้อมูลหรือไม่ โดยทั่วไปหากคุณใช้บันทึก 100,000 รายการในหน่วยความจำในแต่ละครั้งมันอาจทำให้หน่วยความจำล้น ปัญหานี้ค่อนข้างซ่อนอยู่ ก่อนที่จะออนไลน์มีข้อมูลน้อยลงในฐานข้อมูลและมันไม่ใช่เรื่องง่ายที่จะมีปัญหา หลังจากออนไลน์มีข้อมูลเพิ่มเติมในฐานข้อมูลและแบบสอบถามเดียวอาจทำให้หน่วยความจำล้น ดังนั้นลองใช้การเพิกถอนการสืบค้นฐานข้อมูล
4) ตรวจสอบว่าวัตถุคอลเลกชันเช่นรายการแผนที่ยังไม่ได้รับการล้างหลังการใช้งานหรือไม่ วัตถุการรวบรวมเช่นรายการและแผนที่จะมีการอ้างอิงถึงวัตถุเสมอทำให้วัตถุเหล่านี้ไม่สามารถรีไซเคิลได้โดย GC
กรณี:
1. เมื่อไฮเบอร์เนตสอบถามข้อมูลมันจะสืบค้นข้อมูลมากเกินไปในครั้งเดียว ต่อมารหัสในส่วนนี้จะถูกปรับและมีเพียงจำนวนข้อมูลที่ระบุในแต่ละครั้งเท่านั้นที่จะแก้ปัญหาได้สำเร็จ 2. เมื่อทำการทดสอบความเครียด OutofMemoryError จะปรากฏขึ้นและพบว่าทรัพยากรของเซสชั่นยังไม่ได้รับการปล่อยตัว เป็นการดีที่สุดที่จะปล่อยทรัพยากรของเซสชันผ่านวิธีการไม่ใช้ค่าของเซสชัน
3. วนซ้ำจะปรากฏในโปรแกรม
4. OutofMemoryError ปรากฏขึ้นเมื่อ Tomcat ถูกปรับใช้และเรียกใช้และค่าพารามิเตอร์หน่วยความจำจะเพิ่มขึ้นเพื่อแก้ปัญหานี้
java.lang.outofMemoryError ใน Tomcat: Java Heap Space Exception Handling
1. ขนาดฮีปการตั้งค่าของกอง JVM อ้างถึงการตั้งค่าของพื้นที่หน่วยความจำที่ JVM สามารถจัดเตรียมได้ในระหว่างการดำเนินการโปรแกรม Java เมื่อ JVM เริ่มต้นขึ้นมันจะตั้งค่าขนาดฮีปโดยอัตโนมัติ พื้นที่เริ่มต้น (เช่น -xms) คือ 1/64 ของหน่วยความจำทางกายภาพและพื้นที่สูงสุด (-xmx) คือ 1/4 ของหน่วยความจำทางกายภาพ คุณสามารถใช้ -xmn -xms -xmx และตัวเลือกอื่น ๆ ที่จัดทำโดย JVM เพื่อตั้งค่า ขนาดของขนาดฮีปคือผลรวมของคนรุ่นใหม่และผู้ครอบครอง เคล็ดลับ: ข้อความข้อยกเว้นนี้จะถูกโยนลงหากใช้เวลา 98% ของเวลาสำหรับ GC และขนาดกองที่มีอยู่น้อยกว่า 2% เคล็ดลับ: ขนาดฮีปสูงสุดไม่ควรเกิน 80% ของหน่วยความจำทางกายภาพที่มีอยู่ โดยทั่วไปตั้งค่าตัวเลือก -xms และ -xmx เป็นเดียวกันในขณะที่ -xmn คือ 1/4 ของค่า -xmx
2. วิธีแก้ปัญหา: ตั้งขนาดฮีปด้วยตนเองและปรับเปลี่ยน tomcat_home/bin/catalina.sh เพิ่มบรรทัดต่อไปนี้เป็น "echo" โดยใช้ catalina_base: $ catalina_base "": java_opts = " -เซิร์ฟเวอร์ -xms800m -xmx800m -xx: maxnewsize = 256m" "
java.lang.outofMemoryError: การจัดการข้อยกเว้นพื้นที่ Permgen ใน Tomcat
1. พื้นที่ Permgen ชื่อเต็มของพื้นที่ Permgen เป็นพื้นที่สร้างถาวรซึ่งหมายถึงพื้นที่จัดเก็บถาวรของหน่วยความจำ หน่วยความจำชิ้นนี้ส่วนใหญ่จะถูกเก็บไว้โดย JVM ชั้นเรียนจะถูกวางไว้ในพื้นที่ permgen เมื่อโหลด มันแตกต่างจากพื้นที่ฮีปที่จัดเก็บอินสแตนซ์ (อินสแตนซ์) GC (Garbage Collection) จะไม่ทำความสะอาดพื้นที่ permgen ในระหว่างการรันไทม์ของโปรแกรมหลัก ดังนั้นหากมีคลาสมากมายในแอปพลิเคชันของคุณมีแนวโน้มว่าข้อผิดพลาดของพื้นที่ Permgen จะเกิดขึ้น ข้อผิดพลาดนี้เป็นเรื่องปกติเมื่อเว็บเซิร์ฟเวอร์ precompiles jsp หากคุณใช้ขวดของบุคคลที่สามจำนวนมากภายใต้เว็บแอปของคุณขนาดเกินขนาดเริ่มต้นของ JVM (4M) ข้อความแสดงข้อผิดพลาดนี้จะถูกสร้างขึ้น
การแก้ไข: ตั้งค่าขนาดสูงสุดด้วยตนเองและแก้ไข Tomcat_home/bin/catalina.sh เพิ่มบรรทัดต่อไปนี้เป็น "echo" โดยใช้ catalina_base: $ catalina_base "": java_opts = " -เซิร์ฟเวอร์ -xx: permsize = 64m -xx: maxpermsize = 128m เพื่อให้บรรลุวัตถุประสงค์ในการลดการใช้หน่วยความจำซ้ำ ๆ ของเอกสาร JAR
java.lang.outofMemoryError การจัดการข้อยกเว้นใน weblogic
พรอมต์ข้อผิดพลาด: "สาเหตุของ ervletexception java.lang.outofMemoryError"
การแก้ไข: ปรับพารามิเตอร์ใน commenv ใน bea/weblogic/สามัญ: ดวงอาทิตย์ถ้า "%production_mode%" == "true" goto sun_prod_mode set java_vm = -client set mem_args = -xms256m -xmx512m -xx: maxpermsize = 256m : sun_prod_mode set java_vm = -server set mem_args = -xms256m -xmx512m -xx: maxpermsize = 256m goto ดำเนินการต่อ
java.lang.outofMemoryError เมื่อ Eclipse เรียกใช้ JBOSS: การจัดการข้อยกเว้น Space Permgen
เมื่อเรียกใช้ JBoss ใน Eclipse ถ้าใช้เวลานานเกินไปบางครั้ง java.lang.outofMemoryError: ข้อผิดพลาดพื้นที่ Permgen นี่คือทางออกสำหรับคุณ:
1) คลิกลูกศรขนาดเล็กถัดจากไอคอนการดีบัก
2) คลิกรายการเมนู "ดีบัก ... ";
3) เลือก "Jboss v4.2 ที่ localhost" ภายใต้แผนผัง "เซิร์ฟเวอร์ทั่วไป" ทางด้านซ้าย;
4) คลิกแท็บ "อาร์กิวเมนต์" ทางด้านขวาและเพิ่มใน "VM อาร์กิวเมนต์":
-dprogram.name = run.bat -djava.endorsed.dirs = "d:/jboss405/bin /../ lib/รับรอง" -xms128m -xmx512m -xx: permsize = 64m -xx: maxpermsize = 256m
5) หากคุณเรียกใช้ JBOSS ในโหมดบรรทัดคำสั่งหรือคลิกโดยตรง "run.bat" คุณต้องแก้ไขตัวเลือก JVM ในไฟล์ bin/run.conf ค้นหา java_opts = " -xms128m -xmx512m ... บันทึกก็โอเค
6) หมายเหตุ: หมายเลข 128, 512, 64 และ 256 สามารถปรับได้ตามการกำหนดค่าของเครื่องของคุณจากนั้นคลิก "ใช้"
java.lang.outofMemoryError การจัดการข้อยกเว้นภายใต้เรซิน
เหตุผล: ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากหน่วยความจำทางกายภาพของ JVM มีขนาดเล็กเกินไป Java Virtual Machine เริ่มต้นมีหน่วยความจำสูงสุดเพียง 64 เมกะไบต์ซึ่งอาจไม่มีปัญหาในระหว่างการพัฒนาและการดีบัก แต่มันก็ยังห่างไกลจากความต้องการในสภาพแวดล้อมแอปพลิเคชันจริงเว้นแต่แอปพลิเคชันของคุณจะเล็กมากและไม่สามารถเข้าถึงได้ มิฉะนั้นคุณอาจพบข้อผิดพลาดในแพ็คเกจ java.lang.outofMemoryError หลังจากโปรแกรมทำงานเป็นระยะเวลาหนึ่ง ดังนั้นเราจำเป็นต้องเพิ่มขนาดของหน่วยความจำเครื่องเสมือนที่มีอยู่ในอ่างเก็บน้ำ
การแก้ไข: แก้ไขตัวเลือก ARGS ใน /usr/local/resin/bin/httpd.sh เพื่อเพิ่มพารามิเตอร์ -xms (หน่วยความจำเริ่มต้น) และ -xmx (ขนาดหน่วยความจำสูงสุดสามารถใช้) ซึ่งสามารถใช้เพื่อ จำกัด การใช้หน่วยความจำทางกายภาพของ JVM ตัวอย่างเช่น: หลังจากการตั้งค่า args = " -xms128m -xmx256m" หน่วยความจำทางกายภาพเริ่มต้นของ JVM คือ 128m และหน่วยความจำทางกายภาพสูงสุดสามารถใช้ได้คือ 256m ค่าทั้งสองนี้ควรตั้งค่าโดยผู้ดูแลระบบตามสถานการณ์จริงของเซิร์ฟเวอร์
ข้างต้นเป็นเนื้อหาที่สมบูรณ์ของการแก้ปัญหาที่สมบูรณ์แบบสำหรับปัญหาการจัดการข้อผิดพลาดของ java.lang.outofMemoryError ที่มาถึงคุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com ~