CentOS SWAP ราคาเท่าไหร่สำหรับ 16GB of RAM?


11

SWAP คุณจะให้ CentOS ติดตั้งบน Quad Core XEON คู่กับ RAM ขนาด 16GB ที่กำลังจะเรียกใช้เว็บไซต์ php พร้อมกับแบ็กเอนด์ mysql - โหลดปานกลาง / หนักหรือไม่

centos  swap 

คำตอบ:


20

ไม่เกินกิ๊กหรือสอง - คุณต้องการการแลกเปลี่ยนเล็กน้อยในกรณีและเพราะมันช่วยให้สิ่งต่าง ๆ ทำงานได้ดีขึ้นเล็กน้อย แต่ถ้าคุณไปถึงจุดที่คุณทำการแลกเปลี่ยนอย่างหนัก จะไร้ประโยชน์ - และในสถานการณ์ความหายนะที่เกิดขึ้นจริงคุณดีกว่าจริง ๆ ด้วยพื้นที่สว็อปเล็ก ๆ เพราะคุณจะทำให้ OOM killer เร็วขึ้นแทนที่จะทำในภายหลัง


7
และโปรดจำไว้ว่าคุณสามารถเพิ่มพื้นที่สว็อปได้มากขึ้นในภายหลังหากจำเป็นต้องใช้พื้นที่บางส่วนและสร้างโวลุ่มใหม่ (ถ้าใช้ LVM) หรือใช้ไฟล์เป็นสว็อปกับสิ่งที่คล้ายกันdd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett

3
ในฐานะที่เป็นบันทึกด้านข้างคุณสามารถควบคุมระดับการแลกเปลี่ยนโดยการปรับค่า / proc / sys / vm / swappiness
David

2
ฉันจะต้องไม่เห็นด้วยกับบางจุดที่นี่ . . ก่อนอื่นดิสก์มีราคาถูกคุณอาจทิ้ง GB ไว้สักสองสามอัน ประการที่สองนักฆ่า OOM สามารถทำลายกล่องทั้งหมดของคุณได้ถ้าคุณโชคร้าย การใช้งานในทางใดทางหนึ่งหรือพิจารณาว่าดีกว่าเพื่อกระตุ้น OOM killer เป็นไอเดียที่แย่มาก การคิดว่ากล่องที่ซ่อนอาจดีกว่าการชะลอตัวที่อาจเกิดขึ้นก็เป็นความคิดที่ไม่ดีเช่นกัน เวลาเดียวที่จะสมเหตุสมผลคือถ้าคุณมีการตั้งค่าเฉพาะอย่างมากที่วางแผนไว้สำหรับสถานการณ์นั้น
Christopher Cashell

ด้านทราบโดยทั่วไปแล้วมันจะดีกว่าที่จะตั้ง swap ไปยังพาร์ทิชันและไม่ใช่ไฟล์เพื่อหลีกเลี่ยงค่าใช้จ่ายและลดความซับซ้อนของกระบวนการบูต อย่างไรก็ตามการใช้ไฟล์จะใช้งานได้ 4GB เป็นระบบใด ๆ ควรจะต้องฉันสงสัยคุณจะได้รับการเปลี่ยนมากอยู่แล้วกับ 16GB แรม
Silverfire

ตามจริงแล้ว Andrew Morton ประสิทธิภาพควรอยู่ในระดับเดียวกันระหว่าง swapfile และพาร์ติชั่น lkml.org/lkml/2005/6/29/11
Journeyman Geek

8

ฉันขอโทษสำหรับคำตอบที่ยาวมาก ฉันต้องการที่จะให้บางสิ่งบางอย่างเข้าถึงได้ในขณะนี้!

TLDR; ตามหลักวิชาแล้วคำตอบคือ "อาจจะไม่น้อยกว่าจำนวนหน่วยความจำที่มีอยู่ทั้งหมดที่แอปพลิเคชันของคุณต้องการใช้"

ฉันจะพยายามอธิบายถ้าคุณอยู่กับฉัน ..

บิตเกี่ยวกับหน่วยความจำเสมือน

ฉันรู้สึกว่ามีความเข้าใจผิดร่วมกันในทุกวันนี้เกี่ยวกับคุณค่าของการแลกเปลี่ยนและจุดประสงค์ของมันคืออะไร มักจะถือว่าการแลกเปลี่ยนนั้นมีความหมายเป็น 'ธนาคารสำรอง' สำหรับหน่วยความจำเมื่อหน่วยความจำของคุณเหลือน้อย ใช่นี้เป็นจริงบางส่วน แต่เคอร์เนลไม่ต้องการที่จะใช้แลกเปลี่ยนของคุณเป็นธนาคารสำรอง นอกจากนี้เคอร์เนลไม่ต้องการที่จะเรียกใช้ดิสก์เพื่อรับข้อมูลที่คุณอยู่หลังจาก!

ในพื้นที่แอพพลิเคชันมีสิ่งต่าง ๆ ที่เคอร์เนลจะเก็บไว้ในหน่วยความจำ

  • ข้อมูลไฟล์ที่แมป
  • ระบบไฟล์ tmpfs
  • หน่วยความจำแอปพลิเคชันดิบจัดสรรที่รันไทม์
  • รหัสแอปพลิเคชัน (เช่นข้อมูลในส่วนข้อมูลของรูปแบบ ELF)
  • ข้อมูลไฟล์ mmaped แบบส่วนตัว

เพื่อวัตถุประสงค์ในการจัดการหน่วยความจำการจัดสรรหน่วยความจำจะถูกสำรองในบางรูปแบบหรืออีกรูปแบบหนึ่งโดยอุปกรณ์ที่รองรับ

หน่วยความจำที่สำรองไฟล์คือหน่วยความจำที่มาจากไฟล์และโดยทั่วไปแล้ว O / S ประกอบไปด้วยการจัดสรรหน่วยความจำส่วนใหญ่บนระบบ มันรวมไฟล์ต่าง ๆ เช่นไลบรารีที่แชร์ซึ่งโหลดแล้วไฟล์ที่อ่านจากดิสก์และเก็บไว้ในแคชของหน้าและไฟล์ที่ทำจากดิสก์ (ในความเป็นจริงเคอร์เนลจะไม่แยกความแตกต่างของหน้าระหว่างไฟล์ในแคชของหน้าและไฟล์ สิ่งเดียวกัน).

สิ่งที่ยอดเยี่ยมเกี่ยวกับหน่วยความจำนี้จากจุดยืนของเมล็ดเป็นแบบใช้แล้วทิ้งซึ่งควรจะทิ้งหน้าเหล่านี้หากคุณต้องการหน่วยความจำสำหรับสิ่งอื่นและนี่คือสิ่งที่หน้าแคชทำหากหน่วยความจำมีความต้องการกะทันหัน

หน่วยความจำที่สำรองข้อมูลโดยไม่ระบุชื่อเป็นอีกเรื่องหนึ่ง หน่วยความจำจากภูมิภาคนี้ไม่ระบุชื่อเพราะไม่มีไฟล์บนดิสก์ที่มีข้อมูลนี้ โดยปกติแล้วจะประกอบด้วยแอปพลิเคชันสแต็กฮีปอะไรก็ตามใน tmpfs และข้อมูล mmapped ซึ่งเป็นข้อมูลส่วนตัวและได้รับการแก้ไข (เนื่องจากไม่สามารถซิงค์สิ่งนี้กลับไปที่ดิสก์) เนื่องจากไม่มีไฟล์ที่ถูกต้องในระบบไฟล์ที่จะเขียนหน้าเหล่านี้กลับไปหากมีการเปลี่ยนแปลงหน่วยความจำที่สำรองข้อมูลโดยไม่ระบุชื่อจึงได้รับการสนับสนุนโดยสื่อสลับ

ตอนนี้เคอร์เนลรู้ว่าเมื่อหน่วยความจำเหลือน้อยมันถูกกว่าการทิ้งไฟล์หน่วยความจำที่สำรองข้อมูลไว้ในหน่วยความจำที่ไม่ระบุชื่อเนื่องจากข้อมูลที่ไม่ระบุชื่อมีโอกาสสูงที่จะ "สกปรก" มากกว่าข้อมูลที่สำรองไฟล์ อัตราหน่วยความจำที่สำรองข้อมูลโดยไม่ระบุชื่อว่ามีค่ามากกว่าหน่วยความจำที่สำรองไฟล์ 80 เท่าและนี่คือสิ่งที่ตัวแก้ไข swappiness ทำบน linux (ดูโพสต์นี้ที่นี่ถ้าคุณต้องการทราบว่าพารามิเตอร์ swappiness กำลังเปลี่ยนแปลง)

สถานการณ์กรณีที่เลวร้ายที่สุด

สถานการณ์กรณีที่เลวร้ายที่สุดเมื่อมาถึงเซิร์ฟเวอร์ที่ไม่สามารถควบคุมได้และ OOMing ขึ้นอยู่กับข้อเท็จจริงที่ว่ามันใช้เวลานานเกินไปในการจัดการคำขอ I / O มากกว่าที่จะยอมรับคำขอจัดสรรหน่วยความจำ มีสองเงื่อนไขที่สามารถเรียกใช้เกณฑ์นี้

  • การสลับหน่วยความจำโดยไม่ระบุชื่อตลอดเวลาเพื่อดึงข้อมูลหน้าเว็บที่ต้องการหรือจัดสรรหน้าเพิ่มเติมสำหรับแอปพลิเคชัน
  • การใช้เวลามากเกินไปในการดึงข้อมูลจากดิสก์เพราะมันไม่ได้อยู่ในหน่วยความจำมากกว่าที่คุณให้เพื่อดำเนินการกระบวนการที่ต้องการเวลา CPU

สิ่งแรกคือความคิดทั่วไปของปัญหา นั่นคือเนื่องจากหน่วยความจำจำนวนมากอาศัยอยู่ในการแลกเปลี่ยนเราจำเป็นต้องสลับหน่วยความจำที่ไม่ระบุชื่อออกจาก RAM นำมันกลับมาเป็น swap จากนั้นนำบางอย่างจากการแลกเปลี่ยนและใส่ลงใน RAM จริง การดำเนินการนี้มีราคาแพงมากทำให้เครื่องช้าลงจนถึงจุดที่สามารถกลายเป็นสถานการณ์ที่ไม่สามารถกู้คืนได้ (เนื่องจากมีสิ่งต่าง ๆ รอคิวสำหรับความต้องการของหน้ามากกว่าที่จะให้บริการจาก I / O)

คนที่สองถือว่าน้อยกว่า แต่สำคัญพอ ๆ หากคุณจัดสรรหน่วยความจำเกือบทั้งหมดของคุณให้เป็นข้อมูลแอปพลิเคชันจริง - คุณจะไม่ได้อยู่นาน เกือบทุกแอปพลิเคชันอาศัยการอ่านไฟล์จากระบบไฟล์เพื่อใช้งานอาจเป็นเพราะคำแนะนำบางอย่างอาศัยอยู่ในไลบรารีที่แชร์หรือเพราะคุณต้องอ่าน /etc/resolv.conf สำหรับการเรียกใช้ไลบรารีหรือวัตถุประสงค์อื่น ๆ มีความเป็นไปได้ทั้งหมดที่จะหยุดระบบปฏิบัติการ แต่ยังมีหน่วยความจำเพียงพอที่จะปรับให้เหมาะกับทุกแอปพลิเคชันของคุณ แต่เนื่องจากคุณรอคิว I / O จำนวนมากจึงไม่มีโอกาสที่จะทำให้สมบูรณ์

เคอร์เนลต้องการทำอะไรกับการแลกเปลี่ยนของคุณ

เคอร์เนลต้องการที่จะใช้ swap ของคุณเพื่อกำจัดเพจที่มีการสูญเสียหน่วยความจำเพื่อให้สามารถใช้หน่วยความจำนั้นเพื่อสิ่งอื่น

โดยทั่วไปในการทำงานปกติเคอร์เนลชอบเติมข้อมูลในแคชของเพจด้วยข้อมูลที่อ่านจากดิสก์อย่างจริงจังซึ่งหมายความว่าจะไม่อ่านดิสก์สำหรับข้อมูลเดียวกัน นี่เป็นการออกแบบที่ดีและสามารถลด I / O ได้อย่างมาก ตอนนี้อาจเป็นเพราะคุณมีบางแอปพลิเคชั่นนั่งอยู่ในความทรงจำที่หลับเป็นเวลา 3 วันตื่นขึ้นทำงานได้หลายอย่างจากนั้นก็นอนอีก 3 วัน

สิ่งที่เคอร์เนลต้องการจะทำกับข้อมูลนี้คือสลับเพื่อให้มีที่ว่างสำหรับกิจกรรมระบบไฟล์แทนเนื่องจากคุณมีโอกาสสูงที่จะใช้หน้าเหล่านี้บ่อยกว่าหน้าที่คุณใช้สำหรับแอปพลิเคชันของคุณ การแลกเปลี่ยนในแง่นี้อาจเป็นธุรกรรมขนาด 16kb ไปยังสื่อสว็อปของคุณซึ่งคุณแทบจะไม่รู้สึก แต่ในทางกลับกันคุณได้ปลดปล่อยหน่วยความจำขนาด 16kb ที่สามารถนำมาใช้เพื่อจัดเก็บข้อมูลสี่ไฟล์

สิ่งที่เคอร์เนลไม่ต้องการใช้ swap

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

อย่างไรก็ตามฉันควรชี้ให้เห็นว่าหากคุณได้จัดสรรหน่วยความจำมากมายที่เคอร์เนลไม่มีทางเลือกนอกจากทำสิ่งนี้นี่เป็นปัญหาการกำหนดค่าของผู้ดูแลระบบไม่ใช่เคอร์เนลเอง - มันแค่พยายามทำสิ่งที่ดีที่สุดโดย ตัวเลือกที่คุณได้รับมัน!

หากคุณมีการแลกเปลี่ยนจำนวนมากคุณจะเพิ่มโอกาสในการใช้มันหรือไม่?

No! หากคุณมีหน่วยความจำ 1G และมีการแลกเปลี่ยน 4G ไม่มีโอกาส 80% ที่ข้อมูลของคุณจะถูกสับเปลี่ยน! เคอร์เนลต้องการใช้การแลกเปลี่ยนเฉพาะเมื่อเพจในหน่วยความจำสามารถแสดงผลได้ดีกว่าทำอย่างอื่น!

เป็นประโยชน์หรือไม่ที่จะไม่ใช้ swap เลย

ฉันจะไม่ทำสิ่งนี้ การสลับช่วยให้ O / S กำจัดหน่วยความจำที่คุณต้องการ แต่ไม่เคยใช้ หากคุณไม่มีการแลกเปลี่ยนหน่วยความจำที่เพิ่งกลืนกินของคุณคุณจะไม่ได้รับกลับมาซึ่งคุณอาจเห็นการปรับปรุงประสิทธิภาพที่สำคัญโดยการอนุญาตให้พูดว่าแคชของเพจจะมีแทน

การแลกเปลี่ยนที่ดีที่สุดคืออะไร

ตามทฤษฎีแล้วค้นหาจำนวนหน่วยความจำที่มีอยู่ + 20% สำหรับความปลอดภัยเช่นการโทรเข้าห้องสมุดใหม่ที่ต้องจัดสรรหน่วยความจำจากฮีป - จากนั้นตั้งค่าการแลกเปลี่ยนเป็นจำนวนเงินนั้น สิ่งนี้ (ตามหลักเหตุผลแล้ว) อนุญาตให้ระบบปฏิบัติการสลับหน่วยความจำที่ไม่ระบุชื่อออกทั้งหมดหากจำเป็นต้องหาวิธีเพื่อสิ่งที่มีประโยชน์มากกว่า

ถ้าฉันได้รับโอกาสเคอร์เนลที่จะแลกเปลี่ยนทุกอย่างที่เป็นอันตรายหรือไม่

โปรดจำไว้ว่าเคอร์เนลไม่ต้องการสลับเพื่อหลีกทางให้กับการจัดสรรหน่วยความจำที่ไม่ระบุชื่อที่นี่มากขึ้นมันจะสลับหน้าเพจที่ไม่ได้ใช้งานเพื่อประโยชน์อย่างอื่นที่จะทำให้การใช้พื้นที่ดีขึ้นแทน

หากการสลับหน่วยความจำไม่ได้อยู่ในหน่วยความจำที่ไม่ระบุชื่อเพิ่มเติมแสดงว่าคุณทำอะไรผิดพลาดและต้องการ RAM เพิ่มขึ้นหรือเพื่อปรับแต่งแอปพลิเคชันของคุณใหม่

คุณต้องการ RAM เท่าใด

คุณต้องอนุญาตให้ RAM เพียงพอที่จะเรียกใช้แอปพลิเคชันทั้งหมดของคุณแน่นอน แต่คุณควรอนุญาตให้ RAM เพิ่ม 2G สำหรับ pagecache เพื่อเติม - อาจจะมากกว่านี้ แคชของหน้าทำให้คอมพิวเตอร์ของคุณเร็วขึ้นมากและดิสก์ของคุณจะใช้งานได้นานขึ้น หากคุณคิดที่จะเรียกใช้เว็บเซิร์ฟเวอร์การมี pagecache มากขึ้นเป็นความคิดที่ดีเนื่องจากจำนวนเนื้อหาคงที่ที่คุณสามารถเรียกคืนและนำกลับมาใช้ใหม่จาก pagecache ที่จะให้บริการ (ถ้าปริมาณงานของเว็บเซิร์ฟเวอร์ของคุณเป็น 5mb / s ต้องการที่จะดึงเนื้อหา 5mb / s ที่คุณสร้างจากดิสก์ของคุณหลังจากทั้งหมด!)

จะทำอย่างไรถ้าคุณไม่ไว้วางใจลินุกซ์ในการแลกเปลี่ยนอย่างถูกต้อง

หากคุณกังวลจริงๆคุณสามารถจัดสรรหน่วยความจำได้มากกว่าที่คุณมี:

  • ตั้งค่าจำนวนการแลกเปลี่ยนของคุณให้ไม่เกิน RAM ของคุณ
  • ตั้งค่า / proc / sys / vm / overcommit_memory เป็น 2
  • ตั้งค่า / proc / sys / vm / overcommit_ratio เป็นค่าที่ไม่เกินขีด จำกัด RAM จริง ดูเอกสารประกอบเคอร์เนลเพื่อดูว่าคุณต้องการใช้หมายเลขนั้น

วิธีที่ดีที่สุดในการปรับแต่งหน่วยความจำสำหรับแอปพลิเคชันของฉันคืออะไร

  • ทำความเข้าใจเกี่ยวกับสิ่งที่ swappiness จริง ๆ แล้ว
  • ใช้กลุ่มเพื่อจัดสรรทรัพยากรที่ถูกต้องต่อแอปพลิเคชัน
  • เปลี่ยนโหมด overcommit ที่กล่าวถึงข้างต้นเพื่อให้ระบบปฏิบัติการบังคับใช้ข้อ จำกัด ที่เข้มงวด
  • ใช้ cgroups ดังกล่าวต่อ Priorites OOM ชุดในการใช้งานที่คุณจริงๆต้องการให้ถ้าคุณออกจากหน่วยความจำและโปรแกรมที่คุณจริงๆต้องการคูถ้าคุณออกของหน่วยความจำ

ผู้ขายแนะนำการกำหนดค่าที่แตกต่างกัน ..

ฟังที่นั่นแทน แอปพลิเคชั่นบางตัวเขียนในลักษณะที่พวกเขาจงใจเรียกใช้เคอร์เนลเพื่อให้เพจของพวกเขาแอ็คทีฟเหนือแอพพลิเคชั่นอื่นทั้งหมด นี่เป็นกลอุบายที่น่ารังเกียจที่จะซื่อสัตย์ แต่ก็ทำลายความสามารถของเมล็ดในการจัดการหน่วยความจำได้อย่างราบรื่นเมื่อมันเกิดขึ้น หากผู้ขายของคุณให้ข้อมูลเฉพาะแก่คุณพวกเขาก็จะตกอยู่ในหมวดหมู่นี้และฟังสิ่งที่พวกเขาพูดแทน

สรุป

  • Swap มีไว้เพื่อใช้เป็นสถานที่สำหรับเก็บความทรงจำที่สูญเปล่าไป ไม่เป็น 'หน่วยความจำสำรอง'
  • การมีการแลกเปลี่ยนจำนวนมากจะไม่มีผลใด ๆ ต่อโอกาสในการใช้งาน
  • เคอร์เนลต้องการหยุดคุณเข้าถึงดิสก์สำหรับข้อมูลของคุณ สิ่งนี้ใช้เช่นเดียวกับ - ถ้าไม่เท่ากับแคชของเพจเช่นเดียวกับการสลับพื้นที่
  • เคอร์เนลจะพยายามอย่างดีที่สุดเพื่อตั้งค่าที่คุณมอบให้กับแอพที่คุณใช้ แต่อย่าแปลกใจถ้าคุณ OOM ถ้าคุณมีเด็ก apache 500 คนทั้งหมดใช้หน่วยความจำ 32M ขึ้นไป นั่นเป็นความผิดพลาดของการกำหนดค่าที่คุณเลือกไม่ใช่การจัดการหน่วยความจำ

เคอร์เนลมักจะทำงานได้ดีมากในการจัดการหน่วยความจำเสมือนอย่างถูกต้อง เป็นกรณีที่แอปพลิเคชันของคุณจัดสรรหน่วยความจำมากกว่าที่คุณคาดหวังว่าจะสามารถใช้งานได้และนั่นคือสาเหตุที่ทำให้เกิด OOM

Swap เคยถูกใช้เป็น 'memory memory' แต่มันไม่ได้มีวัตถุประสงค์หลักอีกต่อไปดังนั้นอย่าคิดว่าจะใช้มันแบบนั้น แต่ขอขอบคุณที่เคอร์เนลของคุณอาจรู้ดีที่สุดว่ามันต้องการใช้หน่วยความจำของคุณเพื่ออะไร ให้พื้นที่สำหรับการตัดสินใจและคุณจะได้รับประโยชน์จากการปรับปรุงประสิทธิภาพโดยรวม


2

จากเอกสาร "Oracle 10g Server บน Red Hat® Enterprise Linux® 5 คำแนะนำการปรับใช้"

Oracle ให้คำแนะนำทั่วไปเกี่ยวกับขนาดของการแลกเปลี่ยนใน MetaLink Note 169706.1 คำแนะนำเหล่านี้อาจนำไปสู่การสร้างพื้นที่สว็อปขนาดใหญ่มากบนระบบที่มีหน่วยความจำจำนวนมาก การสลับขนาดใหญ่มากอาจทำให้ประสิทธิภาพการทำงานของระบบลดลงอย่างรุนแรงและสามารถแก้ไขได้โดยการลดพื้นที่สว็อป Red Hat ไม่แนะนำให้จัดสรรมากกว่า 4GB สำหรับการแลกเปลี่ยนบน Red Hat Enterprise Linux 5

ดังนั้นสำหรับ 16GB คุณควรมี swap ไม่เกิน 4GB

PS นอกจากนี้ควรทราบว่าการเรียกใช้oomนั้นดีกว่ากระบวนการสลับที่ไม่สามารถใช้งานได้โดยใช้แบนด์วิดท์ I / O ทั้งหมด



-1

จากสิ่งที่ฉันจำได้จากเอกสารของ linux: หาก ram ของคุณมีขนาดใหญ่กว่า 2gb คุณจะต้องสลับ = (ramSize + 2) ถ้ามันน้อยกว่าคุณจะสลับ = (ramSize * 2)


-2

ฉันพบเอกสารนี้สำหรับคุณแล้วมันจะช่วยให้คุณตัดสินใจได้ว่าที่นี่คือ: Swap Space คืออะไร แต่คำตอบข้างต้นไม่ถูกต้อง


1
เอกสารที่คุณลิงก์ไปไม่เห็นด้วย ตามกฎที่ระบุไว้ของ "สำหรับจำนวน RAM 2Gb ของ RAM มากกว่า 2Gb" จะให้ 1Gb swap สำหรับ 3Gb RAM (3-2 = 1) ไม่ใช่ 5Gb
David Spillett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.