ส่วนนี้แนะนำส่วนการต่อสู้ที่แท้จริงเท่านั้น สำหรับพารามิเตอร์ทางทฤษฎีที่เฉพาะเจาะจงโปรด Baidu
เครื่องมือที่จำเป็น: Linux Server JMeter Test Tool xshell เว็บแอปพลิเคชัน
พารามิเตอร์ JVM ของ Tomcat สามารถกำหนดค่าใน catalina.sh และหากอยู่ในหน้าต่างคุณสามารถกำหนดค่าไฟล์. bat
การกำหนดค่า 1:
ที่นี่ฉันกำหนดค่าเส้นทางบันทึก GC เป็น /home/log/gc.log เพื่อพิมพ์บันทึก GC ฮีปเริ่มต้นและหน่วยความจำสูงสุดของกองจะถูกตั้งค่าเป็น 50m และเมื่อไฟล์ส่งออกส่งออกจะใช้ตัวเก็บขยะอนุกรมและขนาดการสร้างถาวร 50 เมตร
ใส่เว็บแอปพลิเคชันในไดเรกทอรีที่สอดคล้องกันกำหนดค่า Server.xml (การกำหนดค่าไม่ได้แนะนำที่นี่) และเริ่ม Tomcat
การทดสอบปริมาณงานดำเนินการโดยใช้เครื่องมือทดสอบความดัน (JMeter) นักเรียนที่ไม่เคยใช้มันสามารถดาวน์โหลดและเรียนรู้ได้ในเว็บไซต์ทางการ http://jmeter.apache.org/
สร้างกลุ่มผู้ใช้ (10 เธรดแต่ละเธรดคำขอ 1,000 ครั้ง) ตั้งค่าข้อมูลของคำขอ HTTP สร้างรายงานรวมและบันทึก GC
มาดูบันทึก GC ก่อน:
Full GC บนหน้าจอในที่สุดตรวจสอบรายงานการรวม:
ปริมาณงานยังคงอยู่ที่ 122.7 ต่อวินาที จากกรณีนี้เราจะเห็นได้ว่าคนรุ่นเก่านั้นเต็มและหลังจาก FullGC คนรุ่นใหม่จะเหลืออยู่เล็กน้อย โดยทั่วไปเวลาหยุดชั่วคราวของ GC เต็มรูปแบบนั้นยาวที่สุดและเกิดขึ้นบ่อยครั้งเห็นได้ชัดว่าการกำหนดค่านั้นไม่มีเหตุผล
การกำหนดค่า 2:
การกำหนดค่านี้ส่วนใหญ่จะเพิ่มหน่วยความจำฮีปสูงสุด เพื่อขยายเครื่องเสมือนโดยอัตโนมัติและรับขนาดหน่วยความจำฮีปที่เสถียร
เพียงแค่ให้ความสนใจกับหน่วยความจำกองสูงสุด 82924K อยู่ที่ประมาณ 80 เมตรซึ่งหมายความว่าเครื่องเสมือนจะขยายหน่วยความจำฮีปเป็น 80 เมตรโดยอัตโนมัติและทำให้เสถียร การทดสอบการกำหนดค่านี้เป็นเพียงการค้นหาหน่วยความจำฮีปที่เสถียรสำหรับการทดสอบครั้งต่อไป
การกำหนดค่าที่สาม:
ตั้งค่าหน่วยความจำเริ่มต้นของกองโดย 128m
จากผลลัพธ์ของการกำหนดค่า 2 จะเห็นได้ว่าหน่วยความจำฮีปในที่สุดมีความเสถียรที่ประมาณ 80 เมตรดังนั้นหน่วยความจำกองเล็กกว่า 80 เมตรน่าจะทำให้เกิดปฏิกิริยา GC จำนวนมากดังนั้นที่นี่ฉันตั้งค่าหน่วยความจำกองเป็น 128m ซึ่งสามารถลดจำนวน GCs ได้
คุณจะเห็นว่าปริมาณงานเพิ่มขึ้นเล็กน้อยจำนวน GCs ลดลงอย่างมีนัยสำคัญและช่วงเวลาของ GCs ได้นานขึ้น
การกำหนดค่า 4:
ขณะนี้ใช้ Parallalgc Recycler ซึ่งเป็นผู้รีไซเคิลแบบมัลติเธรดแบบขนาน
ปริมาณงานของ GC Recycler โดยใช้ Multithreaded Parallel ได้รับการปรับปรุงเล็กน้อย (parallalgc และ serialgc มีผลเพียงเล็กน้อยต่อปริมาณงานโดยไม่มีแรงดัน GC)
การกำหนดค่า 5:
การกำหนดค่า 6:
ตามข้อสรุปของการกำหนดค่า 3 GC จะเกิดขึ้นบ่อยครั้งในหน่วยความจำฮีปต่ำกว่า 80m เมื่อรวมกับข้อสรุปที่ได้รับในการกำหนดค่า 4 เมื่อมีความดัน GC บางอย่างปริมาณงานของ ParallelGC และ SerialGC จะแสดงความแตกต่างบางประการ หากหน่วยความจำฮีป 5 และ 6 ได้รับการกำหนดค่าด้วย 64m <80m จะมี GC บ่อยครั้ง เมื่อใช้ผู้รีไซเคิล GC ที่แตกต่างกันในทางทฤษฎีจะมีความแตกต่างอย่างมากในปริมาณงาน แต่ทำไมความแตกต่างในการทดลองของฉันจึงไม่ใหญ่มากและทำไม? เฮ้ครอบครัวของฉันยากจน ฉันใช้ซีพียูหลักเดียว ในกรณีของคอร์เดี่ยวการเปลี่ยนแปลงประสิทธิภาพของ ParallelGC ไม่ชัดเจน แนะนำให้ใช้ SerialGC เมื่อความสามารถแบบคอร์เดี่ยวหรือแบบขนานอ่อนแอ นักเรียนที่มีเงื่อนไขสามารถลองใช้กับเซิร์ฟเวอร์มัลติคอร์ได้!
การกำหนดค่า 7:
ลองใช้ parnewgc คนรุ่นใหม่ใช้ parnewgc เพื่อรีไซเคิลในขณะที่คนรุ่นเก่ายังคงใช้ serialGC เพื่อรีไซเคิล ดูว่าประสิทธิภาพเป็นอย่างไร?
มันมีประสิทธิภาพที่ดีกว่าการใช้เครื่องรีไซเคิลแบบอนุกรมทั้งหมด แต่ประสิทธิภาพที่แย่กว่าการใช้ Recycler แบบขนานทั้งหมด
นอกจากนี้การอัพเกรดเวอร์ชัน JDK อาจปรับปรุงประสิทธิภาพได้เล็กน้อย แต่การอัพเกรดเวอร์ชัน JDK มาพร้อมกับความเสี่ยงบางอย่างและข้อบกพร่องที่ไม่รู้จักบางอย่างอาจถูกนำไปใช้ใน JDK เวอร์ชันใหม่
ในที่สุดฉันแสดงพารามิเตอร์การกำหนดค่า JVM ที่ใช้กันทั่วไปเพื่ออ้างอิง:
1. พารามิเตอร์ที่เกี่ยวข้องกับระยะเวลาการกู้คืนอนุกรม
• -xx:+USERIALGC: ใช้ตัวสะสมอนุกรมในรุ่นใหม่และรุ่นเก่า
• -xx: Survivorratio: กำหนดขนาดของพื้นที่ Eden และอัตราส่วนของพื้นที่ผู้รอดชีวิต
• -xx: PretenuresizEthreshold: ตั้งค่าเกณฑ์สำหรับวัตถุขนาดใหญ่เพื่อเข้าสู่ยุคเก่าโดยตรง เมื่อขนาดของวัตถุเกินค่านี้มันจะถูกจัดสรรโดยตรงในวัยชรา
• -xx: MaxtenurningThreshold: ตั้งค่าอายุสูงสุดของวัตถุที่เข้าสู่วัยชรา หลังจาก GC เล็กน้อยแต่ละครั้งอายุของหัวเรื่องจะถูกเพิ่มโดย 1 วัตถุใด ๆ ที่มากกว่าอายุนี้จะเข้าสู่วัยชราอย่างแน่นอน
2. พารามิเตอร์ที่เกี่ยวข้องกับ GC แบบขนาน
• -xx:+USEPARNEWGC: ใช้ตัวสะสมแบบขนานในรุ่นใหม่
• -xx:+USEPRALLELLDGC: ใช้ตัวสะสมคู่ขนานในวัยชรา
• -xx:+parallelgcthreads: ตั้งค่าจำนวนเธรดที่ใช้สำหรับการรวบรวมขยะซึ่งโดยปกติจะสามารถตั้งค่าให้เท่ากับจำนวน CPU เมื่อมีซีพียูจำนวนมากก็เป็นไปได้ที่จะตั้งค่าค่อนข้างเล็ก
• -xx:+Maxgcpausemillis: ตั้งค่าการรวบรวมขยะสูงสุดเวลาหยุดชั่วคราว ค่าของมันคือจำนวนเต็มที่มากกว่า 0. เมื่อนักสะสมทำงานมันจะปรับขนาดของจาวาซุหรือพารามิเตอร์อื่น ๆ และควบคุมเวลาหยุดชั่วคราวเป็น maxgcpausemillis ให้มากที่สุด
• -XX: +USEADAPTIVESIZEPOLICY: เปิดกลยุทธ์ GC แบบปรับตัว ในโหมดนี้พารามิเตอร์เช่นขนาดของรุ่นใหม่และอัตราส่วนของ Survivio และอายุของวัตถุในรุ่นเก่าจะถูกปรับโดยอัตโนมัติเพื่อให้ได้จุดสมดุลระหว่างขนาดฮีปปริมาณงานและการหยุดชั่วคราว
• -XX:+GCTIMERATIO: ตั้งค่าขนาดปริมาณงาน ค่าของมันคือใบรับรองระหว่าง 0 ถึง 100 สมมติว่าค่าของ GCTimeratio คือ n ระบบจะใช้เวลาไม่เกิน 1/(1+n) ของเวลาในการรวบรวมขยะ
3. พารามิเตอร์ที่เกี่ยวข้องกับ CMS Collector
• -xx:+USECONCMARKSWEEPGC: คนรุ่นใหม่ใช้ตัวสะสมแบบขนานในขณะที่รุ่นเก่าใช้ CMS+นักสะสมอนุกรม
• -xx: ParallelCmsthreads: ตั้งจำนวนเธรดสำหรับ CMS
• -xx: CMSInitiatingOccupancyFraction: ตั้งค่าจำนวน CMS collector ที่ถูกเรียกใช้หลังจากใช้พื้นที่อายุเก่าเริ่มต้น 68%
• -XX: USECMSCOMPACTATATFULLCOLLECTION
• -XX: CMSFULLGCBEFORECOMPACTION: ตั้งค่าจำนวนครั้งที่ CMS Garbage Collection ดำเนินการและทำการบีบอัดหน่วยความจำ
• -xx:+cmsclassunloadingenabled: อนุญาตให้กู้คืนข้อมูลเมตาคลาส
• -XX: CMSInitiatingPerMocCupancyFraction: เมื่ออัตราส่วนการเข้าพักถาวรถึงเปอร์เซ็นต์นี้ให้เริ่มการกู้คืน CMS (หากมีการเปิดใช้งาน -xx:+CMSClassunLoadingEnabled)
• -xx: USECMSInitiatingOcCupancyonly: หมายความว่าการกู้คืน CMS จะดำเนินการเฉพาะเมื่อถึงเกณฑ์
• -XX:+CMSIncrementalMode: ใช้โหมดเพิ่มซึ่งเหมาะสำหรับ CPU เดี่ยว โหมดที่เพิ่มขึ้นถูกทำเครื่องหมายว่าถูกทิ้งไว้ตรงกลางและจะถูกลบออกอย่างสมบูรณ์ใน JDK9
4. พารามิเตอร์ที่เกี่ยวข้องกับระยะเวลาการกู้คืน G1
• -xx:+useg1gc: ใช้การกู้คืน G1
• -xx:+maxgcpausemillis: ตั้งค่าการรวบรวมขยะสูงสุดเวลาหยุดชั่วคราว
• -XX:+GCPAUSETINTINTINTINTINTILLIS: ตั้งค่าช่วงเวลาหยุดชั่วคราว
5. TLAB ที่เกี่ยวข้อง
• -xx:+USETLAB: เปิดการจัดสรร TLAB
• -xx:+printtlab: พิมพ์ข้อมูลการจัดสรรที่เกี่ยวข้องกับ TLAB
• -xx: tlabsize: ตั้งค่าขนาด tlab
• -xx:+resizetLab: ปรับขนาด tlab โดยอัตโนมัติ
6. พารามิเตอร์อื่น ๆ
• -xx:+disableExplicitGc: ปิดใช้งาน GC ที่ชัดเจน
• -xx:+ExplicitGcinvokesconCurrent: ใช้พร้อมกันเพื่อจัดการ GC ที่ชัดเจน
ประสิทธิภาพการทำงานของ JVM Tomcat ด้านบน (แนะนำ) คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น