หลังจากเปลี่ยนระบบปฏิบัติการของคอมพิวเตอร์ที่ใช้งานด้วย Win7 Myeclipse ของฉันไม่เป็นที่น่าพอใจในการเริ่มต้นและความเร็วในการทำงาน โดยเฉพาะอย่างยิ่งเมื่อแก้ไขและดีบักเทมเพลตหลายหน้าในเวลาเดียวกันการสลับระหว่างสองไฟล์จะติดอยู่ประมาณสิบวินาที การพยายามปิดปลั๊กอินต่างๆและยืนยันว่าจะไม่ช่วย ดังนั้นหลังจากศึกษา JVM ประมาณฉันตัดสินใจที่จะพยายามแก้ปัญหานี้จากมุมมองของ JVM
เริ่มการเพิ่มประสิทธิภาพ:
ก่อนอื่นมาดูพารามิเตอร์เริ่มต้นเริ่มต้นใน myeclipse.ini:
-xmx512m: ตั้งค่าหน่วยความจำฮีปสูงสุดเป็น 512m
-xx: maxpermsize = 256m: ตั้งค่าสูงสุดของการสร้างถาวรเป็น 256m
-xx: ReserveDecoDecachesize = 64m: ตั้งค่าขนาดหน่วยความจำที่ครอบครองโดยรหัสเป็น 64m
ไม่มีสิ่งใดสามารถมองเห็นได้จากพารามิเตอร์การเริ่มต้นดังนั้นเพิ่มพารามิเตอร์ที่เกี่ยวข้องสำหรับการเปลี่ยนแปลงหน่วยความจำการพิมพ์:
-xx:+printgctimestamps: พิมพ์การประทับเวลาของแต่ละ GC
-xx:+printgcdetails: พิมพ์ข้อมูลรายละเอียดสำหรับแต่ละ GC
-xloggc: myeclipsegc.log: เอาต์พุต GC Records ไปยังไฟล์
-Verbose: GC: ส่งออกสถานการณ์ที่เกี่ยวข้องของแต่ละ GC
จากนั้นเริ่ม myeclipse และตรวจสอบข้อมูลใน myeclipsegc.log:
การเริ่มต้นใช้เวลาประมาณ 30 วินาที เลือกสกัดกั้นส่วนเล็ก ๆ ของบันทึก คุณจะเห็นได้ว่าใน 10 วินาทีแรกของการเริ่มต้น Myeclipse JVM ดำเนินการมากกว่า 300 GCs และ 9 GCs เต็ม
จากความถี่และข้อมูลของ GC จะเห็นได้ว่าอัตราการกู้คืนหน่วยความจำสูงมากและมีขนาดปรับอย่างต่อเนื่อง นี่ควรเป็นเพราะพื้นที่ไม่เพียงพอในรุ่นน้องและจำเป็นต้องมีค่าเริ่มต้นจำนวนมาก
จากนั้นมุ่งเน้นไปที่ GC เต็ม:
คัดลอกรหัสดังต่อไปนี้: 5.961: [เต็ม GC 5.961: [ดำรงตำแหน่ง: 34568K-> 34456K (49676K), 0.1397651 วินาที] 35336K-> 34456K (53452K) [เวลา: ผู้ใช้ = 0.14 sys = 0.00, จริง = 0.14 วินาที]
9.030: [Full GC 9.030: [ดำรงตำแหน่ง: 53310K-> 52332K (64588K), 0.2034757 วินาที] 56020K-> 52332K (69516K) [43007K-> 42996K (43008K) SYS = 0.00, จริง = 0.20 วินาที]
จากการเปรียบเทียบบันทึกทั้งสองเราจะเห็นได้ว่า GC เต็มรูปแบบส่วนใหญ่รีไซเคิลทั้งสองพื้นที่ที่ดำรงตำแหน่งและ PERM และขนาดของพื้นที่ทั้งสองนี้จะถูกปรับอย่างต่อเนื่องดังนั้นเราจึงตัดสินใจที่จะแก้ไขขนาดของพวกเขาก่อน
ดังนั้นพารามิเตอร์ที่ปรับมีดังนี้:
-XMS512M: ตั้งค่าต่ำสุดของสแต็กเป็น 512m
-xmn192m: ตั้งขนาดของคนรุ่นใหม่เป็น 192m
-xx: Permsize = 192m: ตั้งค่าเริ่มต้นของรุ่นต่อเนื่องเป็น 192m
-xx: maxpermsize = 192m
-xx: ReserveDCodecachesize = 64m
-xx:+printgctimestamps
-xx:+printgcdetails
-xloggc: myeclipsegc.log
-Verbose: GC
รีสตาร์ท myeclipse หนึ่งครั้งเพื่อดูข้อมูลบันทึก:
การเริ่มต้นใช้เวลาประมาณ 12 วินาที จากบันทึกจะเห็นได้ว่ามีเพียง 5 GCs ที่ดำเนินการใน 10 วินาทีแรกและไม่มีการปรับขนาดของแต่ละพื้นที่ที่เกี่ยวข้อง ผลลัพธ์นี้เป็นที่ยอมรับได้เนื่องจากไม่จำเป็นต้องรีสตาร์ทบ่อยครั้งในระหว่างการทำงาน
การเพิ่มประสิทธิภาพของความเร็วในการตอบสนองการทำงาน:
ต่อไปฉันศึกษาความล่าช้าบ่อยครั้งและปัญหาการ์ดขนาดใหญ่เมื่อเปลี่ยนไฟล์ HTML ไปมาที่ทำให้ฉันลำบากเป็นเวลานาน เพื่อศึกษาการเปลี่ยนแปลงหน่วยความจำของ JVM มากขึ้นฉันตัดสินใจใช้ JConsole ซึ่งเป็นเครื่องมือผู้ช่วยที่มาพร้อมกับ Java ก่อนอื่นคืนค่าพารามิเตอร์ของ myeclipse.ini เพื่อหลีกเลี่ยงการรบกวนจากขั้นตอนแรกของการเพิ่มประสิทธิภาพ
เริ่ม Myeclipse เริ่มต้น JConsole และเชื่อมต่อกับ JVM ที่ซึ่ง MyEclipse ตั้งอยู่ แผนภาพหน่วยความจำของกองทั้งหมดหลังจากเสถียรมีดังนี้:
ต่อไปลองเปิดเทมเพลตสองสามตัวจากนั้นสังเกตการเปลี่ยนแปลงหน่วยความจำ
ก่อนอื่นการใช้หน่วยความจำกองโดยรวม:
จะเห็นได้ว่าหลังจากเปิดเทมเพลตหลายแบบการใช้หน่วยความจำฮีปเพิ่มขึ้นอย่างกะทันหันจากต้นฉบับต่ำกว่า 100m เป็นมากกว่า 300 เมตร การใช้งานมีสามเท่า แต่ยังคงอยู่ในช่วง 512m ที่ฉันตั้งไว้ ดังนั้นคุณสามารถพิจารณาการเพิ่มหน่วยความจำฮีปได้ชั่วคราว แต่ให้พิจารณาปรับอัตราส่วนขนาดหน่วยความจำของแต่ละโซนแทน
ดังนั้นเราจึงสังเกตการใช้หน่วยความจำของแต่ละโซนในช่วงเวลานี้ซึ่งโซน Eden มีดังนี้:
อัตราการใช้หน่วยความจำของพื้นที่เอเดนเพิ่มขึ้นอย่างมีนัยสำคัญในช่วงเวลานี้และ GC เกิดขึ้นหลายครั้ง ผ่านข้อมูลการตรวจสอบด้านล่างเราสามารถรู้ได้ว่าโดยค่าเริ่มต้นพื้นที่ Eden จะจัดสรรหน่วยความจำสูงสุด 31 เมตรเท่านั้นซึ่งเห็นได้ชัดว่าไม่เพียงพอ การดำเนินการของจุดเล็ก ๆ น้อย ๆ จะทำให้เกิด GC ในพื้นที่อีเด็น นี่ควรเป็นหนึ่งในสาเหตุของการหน่วงเวลาล่าช้าในสวิตช์เปิดเทมเพลตและจำเป็นต้องปรับ
ถัดไปคือพื้นที่ที่ดำรงตำแหน่ง:
พื้นที่สูงสุดที่จัดสรรโดย JVM ไปยังพื้นที่นี้โดยค่าเริ่มต้นคือ 470m เมื่อมีการเปลี่ยนแปลงการใช้หน่วยความจำขนาดที่แท้จริงของพื้นที่นี้จะถูกปรับอย่างต่อเนื่อง GC เต็มรูปแบบจะเกิดขึ้นทุกครั้งที่มีการปรับขนาดพื้นที่ซึ่งควรเป็นหนึ่งในเหตุผลสำหรับบล็อกขนาดใหญ่บ่อยครั้ง การเปิดเทมเพลตใหม่เป็นเหตุผลหลักในการกระตุ้นการปรับนี้ จากมุมมองของการใช้หน่วยความจำในพื้นที่นี้มันยังจำเป็นที่จะต้องรักษาความซ้ำซ้อนจำนวนหนึ่งโดยการบำรุงรักษาและแก้ไขพื้นที่หน่วยความจำในพื้นที่นี้ที่ประมาณ 450m
จากมุมมองนี้มันยังจำเป็นที่จะต้องขยายหน่วยความจำกองของ JVM เพื่อรักษาพื้นที่ที่มีขนาดใหญ่ขึ้นและพื้นที่อีเด็น
สุดท้ายมาดูพื้นที่ Perm:
เป็นส่วนหนึ่งของพื้นที่วิธีการการเปลี่ยนแปลงหน่วยความจำในพื้นที่นี้ไม่ใหญ่และค่อนข้างเสถียรดังนั้นจึงไม่จำเป็นต้องปล่อยความซ้ำซ้อนมากเกินไป อย่างไรก็ตามเมื่อพิจารณาว่าปริมาณรหัสจริงของโครงการที่เปิดอยู่ในปัจจุบันนั้นไม่ใหญ่มีการตัดสินใจที่จะรักษาไว้ชั่วคราวที่ประมาณ 128 เมตรและค่อยๆปรับมันในอนาคต
ดังนั้นตามการวิเคราะห์ข้างต้นพารามิเตอร์จะถูกปรับเป็น:
-xmx768m
-xms768m
-xmn256m
-xx: Permsize = 192m
-xx: maxpermsize = 192m
-xx: ReserveDCodecachesize = 64m
รีสตาร์ท myeclipse เชื่อมต่อกับ jconsole และเปิดเทมเพลตสามสิบในเวลาเดียวกันเพื่อทำการทดสอบ เมื่อดูอัตราการใช้หน่วยความจำของแต่ละโซนฉันพบปัญหา หลังจากปรับรุ่นหนุ่มสาวเป็น 256m เนื่องจาก Eden ไม่ได้เกิดขึ้นบ่อยครั้งใน GC จำนวนข้อมูลที่เข้าสู่พื้นที่ที่ดำรงตำแหน่งจะลดลงอย่างมีนัยสำคัญ แผนภาพการใช้หน่วยความจำของพื้นที่ที่ดำรงตำแหน่งดังนี้:
ดังที่แสดงในรูปด้านบนเมื่อเทมเพลตจำนวนมากเปิดออกอย่างจงใจพื้นที่ 450m+ ใช้เพียงน้อยกว่า 250 เมตรและอัตราการใช้งานพื้นที่ต่ำเกินไปดังนั้นจึงต้องทำการปรับเปลี่ยน
สรุป
ข้างต้นเป็นความคิดและกระบวนการปรับแต่งจริงสำหรับฉันในการปรับ myeclipse ของฉัน ในการใช้งานจริงฉันทำการปรับเปลี่ยนและปรับแต่งตามความชอบของฉัน พารามิเตอร์สุดท้ายของ myeclipse.ini มีดังนี้:
-vmargs
-xmx512m
-xms512m
-xmn192m
-xx: Permsize = 128m
-xx: maxpermsize = 128m
-xx: ReserveDCodecachesize = 64m
ภายใต้การตั้งค่าพารามิเตอร์นี้ความเร็วในการตอบสนองของ myeclipse นั้นค่อนข้างรับประกันได้และความถี่ของความล่าช้าในการหน่วงเวลาต่าง ๆ จะลดลงอย่างมาก ข้อเสียคือหน่วยความจำระบบที่อยู่โดยผู้อยู่อาศัยถาวรค่อนข้างสูง นักเรียนที่ชอบเปิด myeclipse หลายครั้งในเวลาเดียวกันสามารถทำการปรับเปลี่ยนที่เหมาะสมตามความต้องการและเงื่อนไขจริง
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน