1. การรวบรวมปัญหาการตั้งค่าหน่วยความจำ Tomcat
เมื่อใช้โปรแกรม Java เพื่อสอบถามข้อมูลจำนวนมากจากฐานข้อมูลหรือโหลดแพ็คเกจ JAR โดยแอปพลิเคชันเซิร์ฟเวอร์ (เช่น Tomcat, JBoss, WebLogic) จะปรากฏขึ้น ข้อยกเว้น java.lang.outofMemoryError จะปรากฏขึ้น สิ่งนี้เกิดจากหน่วยความจำไม่เพียงพอในแอปพลิเคชันเซิร์ฟเวอร์ ข้อยกเว้นนี้มักจะมีสถานการณ์ต่อไปนี้ (การใช้สภาพแวดล้อม Tomcat เป็นตัวอย่างเว็บเซิร์ฟเวอร์อื่น ๆ เช่น JBoss, WebLogic ฯลฯ เหมือนกัน):
1. java.lang.outofMemoryError: Permgen Space
ชื่อเต็มของพื้นที่ Permgen เป็นพื้นที่ผลิตถาวรซึ่งหมายถึงพื้นที่จัดเก็บถาวรของหน่วยความจำ outofmemoryError: พื้นที่ Permgen จากมุมมองของข้อความมันเป็นหน่วยความจำล้นและการแก้ปัญหาคือการเพิ่มหน่วยความจำ ทำไมหน่วยความจำถึงล้น? นี่เป็นเพราะหน่วยความจำนี้ส่วนใหญ่จะถูกเก็บไว้โดย JVM ในข้อมูลชั้นเรียนและเมตา ชั้นเรียนจะถูกวางไว้ในพื้นที่พื้นที่ permgen เมื่อโหลด มันแตกต่างจากพื้นที่กองที่เก็บอินสแตนซ์ GC (Garbage Collection) จะไม่ทำความสะอาดพื้นที่ Permgen ในระหว่างการรันโปรแกรมหลัก ดังนั้นหากแอปของคุณจะโหลดคลาสจำนวนมากเป็นไปได้มากที่ข้อผิดพลาดของพื้นที่ permgen จะเกิดขึ้น ข้อผิดพลาดนี้เป็นเรื่องปกติเมื่อเว็บเซิร์ฟเวอร์คอมไพล์ JSP ล่วงหน้า หากคุณใช้ขวดของบุคคลที่สามจำนวนมากภายใต้เว็บแอปของคุณขนาดเกินขนาดเริ่มต้นของ JVM (4M) ข้อความแสดงข้อผิดพลาดนี้จะถูกสร้างขึ้น
วิธีแก้ปัญหา: ตั้งค่าขนาด maxpermsize ด้วยตนเองด้วยตนเอง
. หาก Tomcat เริ่มต้นในโหมด BAT การตั้งค่าต่อไปนี้คือ:
แก้ไข tomcat_home/bin/catalina.sh
เพิ่มบรรทัดต่อไปนี้ใน "echo" โดยใช้ catalina_base: $ catalina_base "::
java_opts = " -เซิร์ฟเวอร์ -xx: permsize = 64m -xx: maxpermsize = 128m
ข. หาก Tomcat ลงทะเบียนเป็นบริการ Windows และเริ่มต้นในบริการค่าคีย์ที่สอดคล้องกันในรีจิสทรีจะต้องมีการแก้ไข
เปิดรีจิสทรีและค้นหาไดเรกทอรี HKEY_LOCAL_MACHINE/ซอฟต์แวร์/ซอฟต์แวร์ Apache Foundation/Procrun 2.0/HTFTY/พารามิเตอร์/Java สีแดงที่ทำเครื่องหมายไว้ (เช่น HTFTY) ในที่อยู่ไดเรกทอรีจะต้องได้รับการแก้ไขตามสถานการณ์ที่แตกต่างกันและลงทะเบียนบริการ TOMCAT เป็นชื่อของบริการ Windows คุณสามารถดูรายการ JVMMS และ JVMMX ที่ JVMMs ตั้งค่าพารามิเตอร์การใช้หน่วยความจำที่เล็กที่สุดและ JVMMX ตั้งค่าพารามิเตอร์การใช้หน่วยความจำที่ใหญ่ที่สุด ตั้งค่าของรายการ JVMMs และ JVMMX และรีสตาร์ทเซิร์ฟเวอร์ Tomcat เพื่อให้ได้ผล
คำแนะนำ: ย้ายไฟล์ JAR ของบุคคลที่สามเดียวกันไปยังไดเรกทอรี TOMCAT/TOMCAT/LIB เพื่อลดการใช้หน่วยความจำซ้ำของเอกสาร JAR
2. java.lang.outofMemoryError: พื้นที่ java heap
การตั้งค่าของกอง JVM อ้างถึงการตั้งค่าของพื้นที่หน่วยความจำที่ JVM สามารถจัดเตรียมได้ในระหว่างการดำเนินการโปรแกรม Java เมื่อ JVM เริ่มต้นมันจะตั้งค่าขนาดฮีปโดยอัตโนมัติ พื้นที่เริ่มต้น (เช่น -xms) คือ 1/64 ของหน่วยความจำทางกายภาพและพื้นที่สูงสุด (-xmx) คือ 1/4 ของหน่วยความจำทางกายภาพ คุณสามารถใช้ -xmn -xms -xmx และตัวเลือกอื่น ๆ ที่จัดทำโดย JVM เพื่อตั้งค่า ขนาดของขนาดฮีปคือผลรวมของคนรุ่นใหม่และผู้ครอบครอง ข้อความข้อยกเว้นนี้จะถูกโยนลงหากใช้เวลา 98% สำหรับ GC และขนาดฮีปที่มีอยู่น้อยกว่า 2%
วิธีแก้ปัญหา: ตั้งขนาดฮีปด้วยตนเอง
. หาก Tomcat เริ่มต้นในโหมด BAT การตั้งค่าต่อไปนี้คือ:
แก้ไข tomcat_home/bin/catalina.sh
เพิ่มบรรทัดต่อไปนี้ใน "echo" โดยใช้ catalina_base: $ catalina_base "::
java_opts = " -เซิร์ฟเวอร์ -xms800m -xmx800m -xx: maxNewSize = 256M"
ข. หาก Tomcat ลงทะเบียนเป็นบริการ Windows และเริ่มต้นในบริการค่าคีย์ที่สอดคล้องกันในรีจิสทรีจะต้องมีการแก้ไข
เปิดรีจิสทรีและค้นหาไดเรกทอรี HKEY_LOCAL_MACHINE/ซอฟต์แวร์/ซอฟต์แวร์ Apache Foundation/Procrun 2.0/HTFTY/พารามิเตอร์/Java สีแดงที่ทำเครื่องหมายไว้ (เช่น HTFTY) ในที่อยู่ไดเรกทอรีจะต้องได้รับการแก้ไขตามสถานการณ์ที่แตกต่างกันและลงทะเบียนบริการ TOMCAT เป็นชื่อของบริการ Windows คุณสามารถดูรายการ JVMMS และ JVMMX ที่ JVMMs ตั้งค่าพารามิเตอร์การใช้หน่วยความจำที่เล็กที่สุดและ JVMMX ตั้งค่าพารามิเตอร์การใช้หน่วยความจำที่ใหญ่ที่สุด ตั้งค่าของรายการ JVMMs และ JVMMX และรีสตาร์ทเซิร์ฟเวอร์ Tomcat เพื่อให้ได้ผล
เคล็ดลับ: ขนาดฮีปสูงสุดไม่ควรเกิน 80% ของหน่วยความจำทางกายภาพที่มีอยู่ โดยทั่วไปตั้งค่าตัวเลือก -xms และ -xmx เป็นเดียวกันในขณะที่ -xmn คือ 1/4 ของค่า -xmx
2. Tomcat เองไม่สามารถทำงานได้โดยตรงบนคอมพิวเตอร์และจำเป็นต้องพึ่งพาระบบปฏิบัติการตามฮาร์ดแวร์และเครื่องเสมือน Java เมื่อโปรแกรม Java เริ่มต้น JVM จะจัดสรรหน่วยความจำเริ่มต้นและหน่วยความจำสูงสุดให้กับแอปพลิเคชัน หน่วยความจำเริ่มต้นและหน่วยความจำสูงสุดนี้จะส่งผลกระทบต่อประสิทธิภาพของโปรแกรมในระดับหนึ่ง ตัวอย่างเช่นเมื่อแอปพลิเคชันใช้หน่วยความจำสูงสุด JVM จะต้องทำการรวบรวมขยะก่อนและปล่อยหน่วยความจำที่ถูกครอบครอง ดังนั้นหากคุณต้องการปรับหน่วยความจำเริ่มต้นและหน่วยความจำสูงสุดของ Tomcat เมื่อเริ่มต้นคุณต้องประกาศให้กับ JVM โดยทั่วไปโปรแกรม Java สามารถปรับหน่วยความจำเริ่มต้นและหน่วยความจำสูงสุดของแอปพลิเคชันผ่าน -xms -xmx เมื่อทำงาน: ขนาดของค่าทั้งสองนี้ถูกตั้งค่าตามความต้องการ ขนาดฮีปเริ่มต้นจะดำเนินการขนาดของหน่วยความจำที่ร้องขอเครื่องเสมือนไปยังระบบเมื่อเริ่มต้น โดยทั่วไปการพูดพารามิเตอร์นี้ไม่สำคัญ อย่างไรก็ตามแอปพลิเคชันบางตัวจะมีหน่วยความจำมากขึ้นอย่างรวดเร็วภายใต้โหลดขนาดใหญ่ ในเวลานี้พารามิเตอร์นี้มีความสำคัญมาก หากหน่วยความจำที่ใช้ถูกตั้งค่าให้เล็กเมื่อเริ่มเครื่องเสมือนและวัตถุจำนวนมากเริ่มต้นในกรณีนี้เครื่องเสมือนต้องเพิ่มหน่วยความจำซ้ำ ๆ เพื่อตอบสนองการใช้งาน ด้วยเหตุนี้เราจึงตั้งค่า -xms และ -xmx ให้มีขนาดเท่ากันและค่าสูงสุดของกองถูก จำกัด โดยหน่วยความจำทางกายภาพที่ใช้โดยระบบ โดยทั่วไปแอปพลิเคชันที่มีข้อมูลจำนวนมากจะใช้วัตถุที่ถาวรและการใช้หน่วยความจำอาจเติบโตอย่างรวดเร็ว เมื่อหน่วยความจำที่ต้องการโดยแอปพลิเคชันเกินค่าสูงสุดของฮีปเครื่องเสมือนจะแจ้งให้หน่วยความจำล้นและทำให้บริการแอปพลิเคชันล้มเหลว ดังนั้นโดยทั่วไปขอแนะนำให้ตั้งค่าสูงสุดของกองเป็น 80% ของค่าสูงสุดของหน่วยความจำที่มีอยู่
Tomcat สามารถใช้หน่วยความจำได้โดยค่าเริ่มต้นคือ 128MB ในโครงการแอปพลิเคชันขนาดใหญ่หน่วยความจำนี้ไม่เพียงพอและจำเป็นต้องเพิ่มขึ้น มีหลายวิธีในการเลือก:
วิธีแรก:
ภายใต้ Windows ในไฟล์ /bin/catalina.bat, unix, ด้านหน้าของไฟล์ /bin/catalina.sh เพิ่มการตั้งค่าต่อไปนี้:
java_opts = '-xms 【เริ่มต้นขนาดหน่วยความจำ】 -xmx 【หน่วยความจำสูงสุดที่สามารถใช้】'
ค่าของพารามิเตอร์ทั้งสองนี้จะต้องเพิ่มขึ้น ตัวอย่างเช่น:
java_opts = ' -xms256m -xmx512m'
หมายความว่าหน่วยความจำเริ่มต้นคือ 256MB และหน่วยความจำสูงสุดที่สามารถใช้งานได้คือ 512MB
วิธีที่สอง: ตั้งชื่อตัวแปรในตัวแปรสภาพแวดล้อม: java_opts ค่าตัวแปร: -xms512m -xmx512m
วิธีที่สาม: สองวิธีแรกนั้นมุ่งเป้าไปที่สถานการณ์ที่ Catalina.bat อยู่ในไดเรกทอรีถังขยะ (เช่น Tomcat ที่บีบอัดโดยตรง ฯลฯ ) แต่ Tomcat รุ่นติดตั้งบางรุ่นไม่มี catalina.bat ในเวลานี้สามารถใช้วิธีการต่อไปนี้ได้ แน่นอนว่าวิธีนี้ยังเป็นวิธีการทั่วไปมากที่สุด: เปิด tomcathome // bin // tomcat5w.exe คลิกที่แท็บ Java และคุณจะพบว่ามีสองรายการ: พูลหน่วยความจำเริ่มต้นและพูลหน่วยความจำสูงสุดพูลหน่วยความจำขั้นตอนนี่คือขนาดหน่วยความจำของการตั้งค่าเริ่มต้น พูลหน่วยความจำสูงสุดนี่คือขนาดหน่วยความจำสูงสุด หลังจากตั้งค่าการตั้งค่ากด OK และรีสตาร์ท Tomcat คุณจะพบว่าหน่วยความจำสำหรับ JVM ใน Tomcat มีการเปลี่ยนแปลง
อีกสิ่งที่ต้องพิจารณาคือกลไกการรวบรวมขยะที่จัดทำโดย Java ขนาดฮีปของเครื่องเสมือนกำหนดเวลาและความถี่ของการใช้จ่ายเครื่องเสมือนในการรวบรวมขยะ ความเร็วที่ยอมรับได้ของการรวบรวมขยะนั้นเกี่ยวข้องกับแอปพลิเคชันและควรปรับโดยการวิเคราะห์เวลาและความถี่ของการรวบรวมขยะจริง หากขนาดฮีปมีขนาดใหญ่การรวบรวมขยะที่สมบูรณ์จะช้า แต่ความถี่จะลดลง หากคุณทำให้ขนาดฮีปสอดคล้องกับความต้องการของหน่วยความจำคอลเลกชันที่สมบูรณ์จะรวดเร็ว แต่จะบ่อยขึ้น วัตถุประสงค์ของการปรับขนาดกองคือการลดเวลาของการรวบรวมขยะเพื่อเพิ่มการประมวลผลคำขอของลูกค้าภายในเวลาที่กำหนด ในระหว่างการเปรียบเทียบเพื่อให้แน่ใจว่าประสิทธิภาพที่ดีที่สุดขนาดฮีปจะต้องถูกตั้งค่าให้มีขนาดใหญ่เพื่อให้แน่ใจว่าการรวบรวมขยะจะไม่เกิดขึ้นในระหว่างกระบวนการเปรียบเทียบทั้งหมด หากระบบใช้เวลาเก็บขยะเป็นจำนวนมากให้ลดขนาดกอง คอลเลกชันขยะที่สมบูรณ์ไม่ควรเกิน 3-5 วินาที หากการรวบรวมขยะกลายเป็นคอขวดขนาดของรุ่นจะต้องมีการระบุการตรวจสอบรายละเอียดของการรวบรวมขยะและผลกระทบของพารามิเตอร์การรวบรวมขยะที่มีต่อประสิทธิภาพ โดยทั่วไปคุณควรใช้หน่วยความจำทางกายภาพ 80% เป็นขนาดฮีป เมื่อเพิ่มโปรเซสเซอร์อย่าลืมเพิ่มหน่วยความจำเนื่องจากการจัดสรรสามารถดำเนินการแบบขนานได้ในขณะที่การรวบรวมขยะไม่ได้อยู่ในคู่ขนาน
สิ่งหนึ่งที่ควรทราบ: ขอแนะนำให้ จำกัด ความแตกต่างระหว่างค่าสูงสุดและค่าต่ำสุดมิฉะนั้นหน่วยความจำจำนวนมากจะสูญเปล่า ค่าต่ำสุดจะเพิ่มขึ้นและค่าสูงสุดสามารถตั้งค่าได้ตามต้องการ แต่จะต้องขึ้นอยู่กับหน่วยความจำทางกายภาพจริง หากการตั้งค่าหน่วยความจำมีขนาดใหญ่เกินไปตัวอย่างเช่นหน่วยความจำสูงสุดจะถูกตั้งค่า แต่หากไม่มีหน่วยความจำ 512m ที่มีอยู่ Tomcat ไม่สามารถเริ่มต้นได้ อาจมีสถานการณ์ที่หน่วยความจำถูกนำกลับมาใช้ใหม่โดยระบบและยกเลิกกระบวนการ
วิธีการข้างต้นในการใช้การปรับขนาดหน่วยความจำ Tomcat และการปรับขนาดเป็นเนื้อหาทั้งหมดที่ฉันได้แชร์กับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น