จนถึงตอนนี้ฉันได้พบกับสามสถานการณ์โดยใช้ Tomcat: ก่อนอื่นใช้ Eclipse กำหนดค่า Tomcat ใน Eclipse ประการที่สองปรับใช้โครงการโดยตรงใน Tomcat ประการที่สามติดตั้ง Tomcat เป็นบริการ Windows
ในทั้งสามกรณีเหล่านี้ OutofMemoryError จะปรากฏขึ้นอย่างไร ที่นี่ฉันต้องพูดถึงว่าฉันได้รับบาดเจ็บอย่างน่าเศร้าจากบทความที่ขาดความรับผิดชอบบนอินเทอร์เน็ต ฉันลองวิธีการตั้งค่าหน่วยความจำทุกประเภท แต่มันก็ไม่ได้ผล วิธีการที่ฉันกล่าวถึงด้านล่างนั้นได้รับการทดสอบทั้งหมดด้วยตัวเองและไม่มีปัญหา
กรณีแรก:
ดังที่แสดงในภาพ: ฉันทำมันด้วยกรอบสีแดง ในหมู่พวกเขา XMS และ XMX เป็นพารามิเตอร์ของขนาดฮีปเริ่มต้นและขนาดฮีปสูงสุดของเครื่องเสมือน Java ซึ่งส่วนใหญ่เป็นเพื่อแก้เหตุผลที่เกิดจากพื้นที่จาวาฮีปไม่เพียงพอ XX: Permsize และ XX: Maxpermsize เป็นพารามิเตอร์ที่เพิ่มขนาดพื้นที่เก็บข้อมูลถาวรเริ่มต้นและขนาดพื้นที่จัดเก็บถาวรสูงสุด พื้นที่สำหรับการโหลดคลาสซึ่งเกี่ยวข้องกับพื้นที่การสร้างถาวร
กรณีที่สอง:
วางโครงการที่รวบรวมไว้โดยตรงใน Tomcat และใช้ startup.bat เพื่อเริ่มบริการ Tomcat ดังนี้ในโฟลเดอร์ Bin ของ Tomca:
ในกรณีนี้เราจำเป็นต้องแก้ไขพารามิเตอร์ใน catalina.bat เปิดมัน ค้นหาสองประโยคนี้:
Rem Guess catalina_home หากไม่ได้กำหนดไว้
ตั้งค่า "current_dir =%cd%"
เพิ่มประโยคนี้ลงในสองประโยคนี้และตรวจสอบให้แน่ใจว่า: ตั้งค่า "java_opts = -xms512m -xmx1024m -xx: permsize = 256m -xx: maxpermsize = 512m"
มีสิ่งที่คล้ายกันมากมายบนอินเทอร์เน็ต แต่หลายคนยังไม่ได้ลอง
สถานการณ์ที่สาม:
หาก Tomcat ของคุณลงทะเบียนเป็นบริการ Windows และเริ่มต้นในการให้บริการแล้ววิธีการข้างต้นนั้นไม่ถูกต้องเพราะในเวลานี้ Tomcat เริ่มต้นคือการอ่านพารามิเตอร์ของรีจิสทรีแทนที่จะเป็นพารามิเตอร์ของไฟล์แบตช์ นี้. : ค้นหา tomcat7w.exe ในไดเรกทอรี bin ของ Tomcat และเปิด:
ภายใต้ตัวเลือก Java: พูลหน่วยความจำเริ่มต้นด้านล่างคือการเริ่มต้นของขนาดหน่วยความจำฮีปและพูลหน่วยความจำสูงสุดคือขนาดหน่วยความจำฮีปสูงสุด ในการตั้งค่าขนาดของพูล Gen Perm คุณต้องเพิ่มพารามิเตอร์ลงในตัวเลือก Java และเพิ่ม::
-dcatalina.base =%tomcat_home%
-dcatalina.home =%tomcat_home%
-djava.endorsed.dirs =%tomcat_home%/รับรอง
-djava.io.tmpdir =%tomcat_home%/temp
-xx: Permsize = 256m
-xx: maxpermsize = 256m
-xx: ReserveDecodecachesize = 48m
-duser.timezone = gmt+08
(ไม่มีช่องว่างหลังจากแต่ละบรรทัด) ฉันได้ลองวิธีนี้แล้วมันใช้งานได้ คุณยังสามารถเพิ่มพารามิเตอร์โดยตรงในรีจิสทรี ฉันจะไม่แนะนำสิ่งนี้ฉันยังไม่ได้ลองด้วยตัวเอง
ในความเป็นจริงมันไม่ยากที่จะแก้ปัญหาหน่วยความจำ Tomcat เราได้รบกวนปัญหานี้มานานแล้ว หากคุณใช้ Eclipse ข้อความแสดงข้อผิดพลาดจะถูกพิมพ์ในคอนโซล แต่เราติดตั้งบริการ TOMCAT ลงในบริการ Windows ดังนั้นเราจึงไม่เห็นพรอมต์ข้อผิดพลาดใด ๆ หลังจากเริ่มโครงการมันอยู่ในสถานะรออยู่เสมอซึ่งช้ามากทำให้ผู้คนสับสน ในระยะสั้นไม่มีประสบการณ์
ข้างต้นคือทั้งหมดที่เกี่ยวกับการแก้ปัญหา outofMemoryError ใน Java และฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคน