การสลับที่ใช้นั้นไม่เลว แต่กิจกรรมการสลับเป็นจำนวนมาก
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
การแลกเปลี่ยนคอลัมน์นั้นไม่มีปัญหาเลย ค่าที่ไม่ใช่ศูนย์ในคอลัมน์siและเพื่อให้เป็นอันตรายต่อประสิทธิภาพของเซิร์ฟเวอร์ คนที่มี RAM เป็นพิเศษ
เป็นการดีที่สุดที่จะปิดการใช้งาน swapinness บนเครื่องที่มี ram หลาย GB:
sysctl -w vm.swappiness=0
สิ่งนี้จะไม่ปิดใช้งานการสลับ มันจะสั่งให้ Linux ใช้การแลกเปลี่ยนเป็นตัวเลือกสุดท้ายเท่านั้น นี่จะเป็นการสูญเสียโปรแกรมบางโปรแกรมที่ไม่จำเป็นต้องอยู่ใน RAM ... แต่ควรสลับไปที่คิวการเข้าถึงดิสก์ของคุณ
แก้ไข 1: เหตุใดค่าเริ่มต้นของการทำ swappiness จึงไม่เหมาะสม
เราต้องจำได้เมื่อสองทศวรรษก่อน 486 ตัวใหญ่มี RAM เพียง 32Mb อัลกอริธึม Swap ได้รับการพัฒนาเมื่อ RAM ทั้งหมดสามารถเคลื่อนย้ายไปยังดิสก์ได้ภายในเสี้ยววินาที ถึงแม้จะมีดิสก์ที่ช้าลงของเวลานั้น นั่นคือเหตุผลที่นโยบายการแลกเปลี่ยนเริ่มต้นนั้นก้าวร้าว แรมเป็นคอขวดในสมัยนั้น ตั้งแต่นั้นมาขนาด RAM เพิ่มขึ้นมากกว่า 10,000 เท่าและความเร็วดิสก์น้อยกว่า 10 เท่า สิ่งนี้เปลี่ยนคอขวดเป็นแบนด์วิดท์ของดิสก์
แก้ไข 2: เหตุใด si จึงเป็นกิจกรรมที่ร้ายแรงสำหรับเซิร์ฟเวอร์
กิจกรรมSiและอื่นๆ บนเครื่องที่มี RAM จำนวนมากนั้นร้ายแรงเพราะหมายความว่าระบบกำลังต่อสู้ด้วยตัวเองสำหรับ RAM สิ่งที่เกิดขึ้นคือดิสก์แม้กระทั่งพื้นที่เก็บข้อมูลขนาดใหญ่ก็ช้าเกินไปเมื่อเทียบกับแรม Aggressive swap จะสนับสนุนแคชของเคอร์เนลดิสก์มากกว่าข้อมูลแอปพลิเคชันและเป็นแหล่งการต่อสู้ทั่วไปสำหรับ RAM ตั้งแต่ระบบปฏิบัติการจะต้องดิสก์แคชฟรีทุกsiเวลาที่จะมีชีวิตอยู่ของแคชพิเศษที่แลกเปลี่ยนให้อยู่ในระดับต่ำเกินไปที่จะเป็นประโยชน์นะ ผลลัพธ์คือคุณกำลังรับแบนด์วิดท์ของดิสก์เพื่อเก็บแคชที่อาจจะไม่ถูกใช้งานและหยุดโปรแกรมของคุณชั่วคราวเพื่อรอหน้าsi ความหมายที่ใช้ทรัพยากรจำนวนมากที่มีประโยชน์น้อยมากหรือไม่มีประโยชน์กับแอปพลิเคชัน
หมายเหตุชื่อเรื่องของการตอบสนอง "กิจกรรมการแลกเปลี่ยนจำนวนมากบนเซิร์ฟเวอร์ที่มี RAM มากมาย" สิ่งนี้ไม่ได้ใช้กับเครื่องที่มีกิจกรรมเป็นครั้งคราวและอื่น ๆ สิ่งนี้อาจใช้ไม่ได้ในอนาคตหากอัลกอริทึมการแลกเปลี่ยนอย่างชาญฉลาดได้รับการพัฒนาในระบบปฏิบัติการ
แก้ไข 3: หน้า "เย็น"
ผู้คนโรแมนติกกับอัลกอริทึมการแลกเปลี่ยน บางคนบอกว่า "ใช้หน้าเพจของ RAM น้อยลง" แต่นี่ไม่ใช่สิ่งที่เคอร์เนลทำเลย สิ่งที่ยากต่อการเข้าใจเกี่ยวกับการแลกเปลี่ยนคือเคอร์เนลไม่ทราบว่า "หน้าหนาว" คืออะไร เคอร์เนลไม่มีเมตริกที่ดีในการพิจารณาว่าจะใช้หน้าเว็บหรือมีแนวโน้มที่จะใช้ในอนาคตอันใกล้ เพื่อหลีกเลี่ยงการที่เคอร์เนลวางหน้าในการแลกเปลี่ยนมากขึ้นหรือน้อยลงแบบสุ่มและหน้าเว็บที่ไม่จำเป็นต้องอยู่ที่นั่น ปัญหาของอัลกอริทึมนั้นคือเพจจำเป็นต้องไปที่ swap เพื่อทราบว่าจำเป็นต้องมีแอปพลิเคชันหรือไม่ และนี่หมายความว่าหน้า "ร้อนแรง" จำนวนมากจะเข้าสู่การแลกเปลี่ยน ปัญหาของดิสก์นั้นช้าเกินไปเมื่อเทียบกับแรม
ฉันสร้างมาตรฐานของตัวเองซึ่งเป็นสถานการณ์จริงที่พบได้ทั่วไปในหลาย ๆ แอปพลิเคชั่นที่มีปริมาณที่เหมาะสม จากการทดสอบของฉันฉันไม่เห็นประโยชน์ของปริมาณงานหรือความหน่วงเมื่อใช้งาน swaps ไกลจากมัน. เมื่อเริ่มทำการสลับจะทำให้ทั้งปริมาณงานและเวลาหน่วงช้าลงอย่างน้อยก็ลำดับความสำคัญ
ฉันไปอีกเล็กน้อยเกี่ยวกับเรื่องนี้: ฉันเข้าใจว่าการสลับไม่ใช่เพื่อการประมวลผล สัญญาแลกเปลี่ยนมีไว้สำหรับกรณีฉุกเฉินเท่านั้น ช่วงเวลาเหล่านั้นเมื่อแอปพลิเคชันทำงานมากเกินไปในเวลาเดียวกันและคุณจะได้รับหน่วยความจำที่ขัดขวาง หากไม่มีการสลับจะทำให้เกิดข้อผิดพลาดออกจำ ฉันพิจารณาการใช้งาน swap เป็นความล้มเหลวของทีมพัฒนาและทีมผลิต นี่เป็นเพียงความคิดเห็นที่เกินกว่าที่เราจะพูดถึง แต่นี่คือสิ่งที่ฉันคิด แน่นอนว่าแอปพลิเคชันของฉันมีการจัดการหน่วยความจำที่ยอดเยี่ยมด้วยตัวเอง