พื้นหลัง
เรากำลังเรียกใช้เซิร์ฟเวอร์ KVM หลายตัวบน Ubuntu 16.04 และได้เริ่มทดสอบการอัปเกรดเป็น 20.04
สิ่งที่เราพบคือแม้ว่าเราจะไม่เคยเห็นการใช้งาน swap บนเซิร์ฟเวอร์ 16.04 ของเรา แต่หลังจากผ่านไปสองสามวัน เซิร์ฟเวอร์ 20.04 จะแสดงการใช้งาน swap ไม่กี่ร้อย MB
ไม่ใช่ปัญหาใหญ่เนื่องจาก vmstat แสดงกิจกรรม swap น้อยมาก และกราฟ munin ยืนยันว่า swap in/out นั้นไม่มีนัยสำคัญ แต่เรายังคงต้องการทำความเข้าใจพฤติกรรมนี้
จนถึงตอนนี้ เราใช้ Nagios เพื่อตรวจสอบการใช้ swap และแจ้งเตือนหากพบ
ระบบที่ได้รับการอัปเกรดจาก 16.04 ถึง 20.04 กำลังเรียกใช้ VM ห้าเครื่องพร้อมโหลดน้อย
ระบบโฮสต์แสดงหน่วยความจำที่ใช้ประมาณ 29G จากหน่วยความจำทั้งหมดประมาณ 200GB ไม่มีจุดสูงสุดหรือสิ่งใดที่ทำให้การใช้งาน mem สูงขนาดนั้น การใช้งานหน่วยความจำของ VM ถูกจำกัด และไม่มีกระบวนการหิวหน่วยความจำอื่นที่ทำงานบนเซิร์ฟเวอร์ KVM เอง
root@kvm-xx:~# ฟรี -m
รวมใช้บัฟ/แคชที่ใช้ร่วมกันฟรี
เมม: 193336 29495 768 5 163072 162404
สลับ: 6675 240 6435
ด้านบน ตัวอย่างของการแลกเปลี่ยนกระบวนการ:
PID VIRT RES SHR S %MEM คำสั่ง SWAP
6447 18,2g 15,8g 22908 S 8,4 qemu-ระบบ-x86 239352
6160 2661052 1,9g 21880 S 1,0 qemu-system-x86 90788
6315 2129436 644388 21856 S 0,3 qemu-ระบบ-x86 29724
6391 10,4g 7,9g 22832 S 4,2 qemu-ระบบ-x86 24028
6197 6505584 3,0g 23008 S 1,6 qemu-system-x86 10972
5686 9908 2944 2720 วินาที 0,0 โครน 60
5805 24404 14440 4388 S 0,0 มูนิน-โหนด 4
เอาต์พุตทั่วไปจาก vmstat ซึ่งไม่แสดงการเปลี่ยนแปลงในการสลับเข้า/ออก
root@kvm-xx:~# vmstat 2 10
procs ----------- หน่วยความจำ ---------- --- swap-- ----- io---- -system-- ------ ซีพียู -----
r b swpd แคชบัฟฟรี si ดังนั้น bi bo ใน cs us sy id wa st
0 0 407620 869916 214784 165081536 0 0 270 12 5 2 0 2 98 0 0
2 0 407620 869900 214784 165081536 0 0 0 28 8533 24140 0 2 98 0 0
1 0 407620 869836 214784 165081536 0 0 0 28 8642 24682 0 2 98 0 0
ระบบนี้ทำงานเป็นเวลาหนึ่งปีโดยมีการสลับ 0 ครั้งใน 16.04 ด้วย VM และโหลดเดียวกัน
สิ่งที่ได้รับการทดลองและทดสอบ
หลังจากอัปเกรดพบว่าไม่ได้ติดตั้ง numad และ VM ไม่ได้ถูกตรึงไว้กับ vcpu บน CPU จริงเดียวกัน หมายถึงการใช้หน่วยความจำข้ามโหนด numa ติดตั้ง numad และยืนยันการปักหมุดแล้ว ฉันเชื่อว่าการใช้สวอปนั้นสูงกว่า ก่อน การเปลี่ยนแปลงนั้น แต่ไม่สามารถพูดได้อย่างแน่นอน
คาดว่าพฤติกรรมนี้จะเกี่ยวข้องกับเคอร์เนล ดังนั้นอัปเกรดเคอร์เนลจาก 5.4 เป็น HWE 5.11 ลักษณะการทำงานเหมือนกันทั้งบน 5.4 และ 5.11
พยายามปิดใช้งาน KSM (การผสานหน้าเดียวกันของเคอร์เนล) เนื่องจากเราไม่ต้องการและกำจัดมันเนื่องจากเป็นแหล่งของการใช้ swap ที่เป็นไปได้
พยายามปิดการแลกเปลี่ยนอย่างสมบูรณ์เพื่อดูว่ามีความอดอยากในหน่วยความจำจริงหรือไม่ ซึ่ง OOM-killer จะมาที่ปาร์ตี้ สิ่งนี้ไม่ได้เกิดขึ้น ดังนั้นสำหรับฉันแล้วดูเหมือนว่าไม่จำเป็นต้องมีการแลกเปลี่ยน แต่ก็ยังใช้ด้วยเหตุผลบางประการ
ความคิดและความคิด
ฉันเชื่อว่าด้วยเหตุผลบางอย่าง เคอร์เนลตัดสินใจที่จะสลับหน้าที่ไม่ได้ใช้งานเพื่อสลับ แม้ว่าความรวดเร็ว = 0 ก็ตาม นี่อาจเป็นพฤติกรรมที่เปลี่ยนไปกับเคอร์เนลใหม่ที่มาพร้อมกับ 20.04
ตามหลักการแล้ว เราต้องการให้เคอร์เนลสลับที่ทางเลือกสุดท้ายเท่านั้นตามพฤติกรรมก่อนหน้านี้ และใช้การตรวจสอบการใช้งาน swap เพื่อตรวจหาการใช้ swap และส่งสัญญาณเตือน Nagios
ฉันได้อ่านหลายกระทู้ในหัวข้อที่คล้ายกัน แต่พบข้อมูลที่ขัดแย้งกันเกี่ยวกับสิ่งที่อาจเป็นคำอธิบาย
สิ่งที่ฉันต้องการหลีกเลี่ยงคือสถานการณ์ที่เราอัปเกรดเซิร์ฟเวอร์ 16.04 ที่โหลดหนักขึ้นเป็น 20.04 และเห็นว่าปัญหานี้บานปลายกลายเป็นปัญหาจริงในการผลิต
ฉันทราบ swapoff / swapon ในการย้ายหน่วยความจำออกจาก swap ด้วยตนเอง แต่คำถามคือทำไมมันถึงสลับกันตั้งแต่แรก
ถ้าใครมีความเข้าใจในเรื่องนี้จะได้รับการชื่นชมอย่างมาก
ขอบคุณ!