Score:4

เหตุใดเซิร์ฟเวอร์ Ubuntu 20.04 ที่มี vm.swappiness = 0 จึงยังคงแลกเปลี่ยนในที่ที่มีหน่วยความจำว่างมากมาย

ธง cn

พื้นหลัง

เรากำลังเรียกใช้เซิร์ฟเวอร์ 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 ด้วยตนเอง แต่คำถามคือทำไมมันถึงสลับกันตั้งแต่แรก

ถ้าใครมีความเข้าใจในเรื่องนี้จะได้รับการชื่นชมอย่างมาก

ขอบคุณ!

Raffa avatar
jp flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [จะย้ายสลับกลับไปเป็น RAM โดยอัตโนมัติได้อย่างไร](https://askubuntu.com/questions/1347219/how-to-auto-move-swap-back-to-ram)
vanadium avatar
cn flag
@Raffa นี่ไม่ใช่คำถามที่นี่ ดังนั้นจึงไม่ใช่คำถามที่ซ้ำกันอย่างแน่นอน @Stian โปรดตรวจสอบ `cat /proc/sys/vm/swappiness` รายงาน 0 เนื่องจากสิ่งที่คุณอธิบายเป็นสิ่งที่คาดไม่ถึงมาก ยกเว้นว่าจะมีการโหลดหน่วยความจำจำนวนมากในบางจุดตั้งแต่การรีบูตครั้งล่าสุด
Stian avatar
cn flag
ใช่ ความรวดเร็วเป็นศูนย์จริงๆ ฉันยังพบว่าสิ่งนี้ไม่คาดคิดมากและไม่เคยเห็นพฤติกรรมนี้ในเคอร์เนล Ubuntu 16.04 4.4 root@kvm-xx:~# cat /proc/sys/vm/swappiness.root 0
Stian avatar
cn flag
ฉันได้เพิ่มเอาต์พุตจากด้านบน ซึ่งแสดงว่ากระบวนการใดใช้หน่วยความจำสลับ ส่วนใหญ่เป็น qemu แต่ก็มีกระบวนการสุ่มอื่น ๆ ปรากฏขึ้นเช่นกัน ในกรณีนี้ cron และ munin-node

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา