เป็นเวลาหลายปีที่ฉันได้อ่านว่ามันเป็นความคิดที่ดีที่จะสร้างพาร์ติชั่นสว็อปซึ่งมีพื้นที่แรมเป็นสองเท่า วันนี้ยังใช้ไม่ได้หรือไม่ หรือไม่จำเป็นอีกต่อไป?
ฉันมีเซิร์ฟเวอร์ที่มี RAM 8 GiB และฉันต้องการสร้างพาร์ติชัน swap และฉันสงสัยว่า 16 GiB มากเกินไป
เป็นเวลาหลายปีที่ฉันได้อ่านว่ามันเป็นความคิดที่ดีที่จะสร้างพาร์ติชั่นสว็อปซึ่งมีพื้นที่แรมเป็นสองเท่า วันนี้ยังใช้ไม่ได้หรือไม่ หรือไม่จำเป็นอีกต่อไป?
ฉันมีเซิร์ฟเวอร์ที่มี RAM 8 GiB และฉันต้องการสร้างพาร์ติชัน swap และฉันสงสัยว่า 16 GiB มากเกินไป
คำตอบ:
สำหรับระบบที่มีขนาดใหญ่, RAM ที่มีอยู่จริง 8GB, เรามักจะจัดสรร 2GB ของการแลกเปลี่ยน เหล่านี้คือเซิร์ฟเวอร์ฐานข้อมูลที่โหลดซึ่งรัน Oracle หรือ PostgreSQL เป็นเวลาหลายปีมาแล้วที่ฉันไม่เคยเห็นการสับเปลี่ยนแลกเปลี่ยนแม้ภายใต้ภาระหนัก การโหลดจำนวนมากมีผู้ใช้ประมาณ 100 ถึง 150 คนที่อ่าน SQL ประมาณ 10,000 ครั้งและอาจเขียน 2,500 ครั้งต่อนาที
นอกจากนี้เรายังปรับระดับการแลกเปลี่ยนเพื่อกีดกันการแลกเปลี่ยนและปิดกระบวนการที่ไม่จำเป็นซึ่งเรารู้ว่าไม่จำเป็นต้องทำงาน (สร้าง Linux เอง)
เช่นเดียวกับ Eddie กล่าวไว้ข้างต้นว่า RAM ที่มีอยู่จริง 1x เป็นกฎที่ดีสำหรับทุกสิ่งภายใต้ 4GB ฉันสร้างลินุกซ์ที่กำหนดเองสำหรับ บริษัท ขนาดใหญ่ที่ติดอันดับ Fortune-500 และสิ่งเหล่านี้เป็นสิ่งที่เรามักจะทำและเราไม่มีปัญหาใด ๆ ในช่วง 5 ปีที่ผ่านมา
บนระบบที่มีขนาดใหญ่กว่า: 64 บิต Linux พร้อม 32GB และ 64GB ของ RAM นี่คือเซิร์ฟเวอร์ฐานข้อมูล Oracle ของเราและโดยทั่วไปเราจะทำการสลับรอบ 2GB สำหรับสิ่งต่างๆเช่น Eddie ชี้ให้เห็นข้างต้นกระบวนการที่ไม่ได้ใช้งานจะถูกย้าย
คำถามที่ดูเหมือนไม่มีเวลา คนดี ๆที่ SlashDotพูดถึงเรื่องนี้มานานแล้ว ตรวจสอบสิ่งที่พวกเขาพูด:
หากฉันดูภาพยนตร์ 4 GB ภายในระยะเวลา 2 ชั่วโมงผู้จัดการหน่วยความจำจำนวนมากจะตัดสินใจว่าการพยายามแคชข้อมูลทั้งหมดนั้นอาจเป็นสิ่งที่ดี ผ่านไปครึ่งหนึ่งของภาพยนตร์มันจะคิดว่าโปรแกรมที่ทำงานอื่น ๆ เหล่านั้นไม่ได้ใช้งานเป็นเวลาหนึ่งชั่วโมงและสามารถสับเปลี่ยนอย่างปลอดภัยเพื่อให้สามารถแคชไฟล์ 4 GB ได้มากขึ้น ผลลัพธ์ที่ได้คือครึ่งหนึ่งของรายการของคุณจะถูกสลับหลังจากดูภาพยนตร์ส่งผลให้ระบบซบเซาที่มีการทับไฟล์แลกเปลี่ยน
หากคุณมี [แรมเพียงพอที่จะเรียกใช้โปรแกรมที่คุณต้องการใช้ในชีวิตประจำวัน] แสดงว่าไม่มีเหตุผลที่จะใช้ swap
ดูคำตอบพื้นที่ SWAP ในระบบหน่วยความจำสูงเท่าไหร่? สำหรับคำแนะนำบางอย่างแม้ว่าคำถามของคุณจะกว้างขึ้น ความคิดเห็นที่แตกต่างกันอย่างกว้างขวางเกี่ยวกับเรื่องนี้ แต่โดยทั่วไปคนที่มี RAM 1 GiB หรือมากกว่านั้นดูเหมือนว่าจะทำงานโดยไม่มีการแลกเปลี่ยนทั้งหมดหรือด้วย 1xmemory เป็นการแลกเปลี่ยน
แม้ว่าคุณจะไม่ได้วางแผนที่จะใช้ RAM มากจนคุณต้องบังคับให้ต้องทำการสลับเกิดขึ้น แต่ก็มีบางอย่างที่มีค่าอย่างน้อย 1xmemory เป็น swap: มันอนุญาตให้ระบบปฏิบัติการสลับบางสิ่งที่ไม่คาดว่าจะใช้ ทันทีเพื่อให้สามารถใช้หน่วยความจำนั้นแทนดิสก์หรือบัฟเฟอร์ IO ได้
หากคุณคาดหวังว่าระบบของคุณจะสามารถจำศีลแล้วกลับมาทำงานได้สำเร็จ :-) ก็น่าจะดีกว่าถ้าคุณจัดสรรพื้นที่เพิ่มเติมสำหรับพาร์ติชัน swap มากกว่าจำนวนแรมทางกายภาพ
ผู้ให้บริการ VPS ของฉันไม่ได้จัดเตรียมพื้นที่สว็อปสำหรับเซิร์ฟเวอร์และของฉันก็ทำงานได้อย่างดีหากไม่มี
เซิร์ฟเวอร์ส่วนใหญ่ที่ฉันเห็นเป็นประจำทุกวันในที่ทำงานก็ไม่ได้สลับกันเช่นกัน
อย่างไรก็ตาม - ถ้าคุณกำลังเรียกใช้ JVM ให้แน่ใจว่าคุณมีอย่างน้อยเป็นพื้นที่ swap มากที่สุดเท่าที่คุณจะเคยตั้ง-Xmx
เพราะรู้จักกัน ปัญหากับ JVM
กล่าวโดยย่อเมื่อ JVM ต้องการหน่วยความจำมากกว่าที่ใช้อยู่ในปัจจุบัน (แต่ยังไม่ได้กดXmx
) มัน:
ซึ่งหมายความว่าหากคุณสลับน้อยกว่าของคุณXmx
ก็สามารถล้มเหลวได้
เพื่ออ้างถึงรายงานข้อผิดพลาด
สิ่งที่ดีที่สุดที่ต้องทำคือเพิ่มขนาดการแลกเปลี่ยนในเครื่องที่พบข้อผิดพลาดนี้
ฉันพยายามเล่นให้ปลอดภัยเมื่อทำงานกับ JVM และตั้งค่า swap เป็นหน่วยความจำกายภาพเท่ากัน
เมื่อพิจารณาถึงความเร็วของฮาร์ดดิสก์ไดรฟ์สมัยใหม่การสลับขนาดใหญ่เป็นเพียงการเชื้อเชิญ บางที SSD จะกลับแนวโน้มนี้ แต่ด้วยความเร็วในการถ่ายโอนสูงสุด 300MB ต่อวินาทีสำหรับดิสก์การสลับ 2-4GB จะใช้เวลาสักครู่
ในสมัยก่อน (เช่น: Linux 1.2, i386, SunOS 4.x) คุณอาจมี daemon 5-15 MB กระบวนการที่ทำงานอยู่และที่ใดก็ได้จาก 4-32MB RAM และ daemons ที่เพิ่งถูกบล็อกรอ I / O สามารถถูกสับเปลี่ยนโดยไม่มีการตีประสิทธิภาพจริง ๆ ... และพวกเขาควรจะดีกว่าเนื่องจากโปรแกรมผู้ใช้อาจมี RAM น้อยกว่า 2-3MB การแลกเปลี่ยนทำให้รู้สึกมาก
ตอนนี้ในสภาพแวดล้อมของฉันเซิร์ฟเวอร์ส่วนใหญ่มีภาระงานหนักหน่วยความจำเดี่ยวและ RAM สามารถประมาณได้อย่างแม่นยำ ... Swap จะมีสำหรับกรณีฉุกเฉินกระบวนการที่เรียกใช้ออกไปและอื่น ๆ
ข้อยกเว้นสำหรับแล็ปท็อปและเวิร์กสเตชันที่อาจจะนอนหลับ ระบบปฏิบัติการหลายแห่งจะใช้พื้นที่สลับเพื่อบันทึกภาพที่หยุดชั่วคราวและในกรณีเหล่านั้นการสลับจะต้องมีขนาดใหญ่กว่าหน่วยความจำกายภาพ ใน Linux ที่มี suspend2 / tuxonice คุณควรมี 2xRAM เป็น swap size เพื่อรองรับ suspend-to-disk
วันนี้หากคุณใช้งาน swap ขนาด 32GB หรือ 64GB เซิร์ฟเวอร์ขนาด 4 GB สำหรับค่าเริ่มต้นคือจำนวนเงินที่ปลอดภัย สิ่งที่ใหญ่กว่านั้นคือ overkill ด้วย RAM ที่มีอยู่จริง
เป็นการดีที่คุณจะไม่ใช้การแลกเปลี่ยนเลยและสิ่งที่ 2x RAM เป็นสิ่งที่หลงเหลือจากเมื่อหลายปีก่อน
ถ้าคุณกังวลเกี่ยวกับมันฉันจะทำสิ่งที่ชอบ:
Max Memory Requirement - Physical Ram = Swap
ฉันคิดว่า 16GB ฟังดูใหญ่เกินไปส่วนตัว
ในสมัยก่อนที่คุณต้องการให้มากที่สุดเท่าที่จะทำได้การบริโภคความทรงจำในเมล็ดข้าวเหนียวสมัยใหม่เป็นเรื่องของอดีต คำพูดเดิมคือ "2x ความจำของคุณ" ระหว่าง 2GB หรือจำนวนเนื้อที่ที่เครื่องมีใน ram ในวันนี้และอายุจะพาคุณเข้าใกล้ที่ที่คุณต้องการ
การแลกเปลี่ยนยังใช้เพื่อเก็บดัมพ์หลังจากเคอร์เนลตกใจ หากคุณสนใจโดยการวิเคราะห์การทิ้งขยะเหล่านี้และไม่ได้ระบุปลายทางการถ่ายโอนข้อมูลอื่นการแลกเปลี่ยนของคุณควรมีอย่างน้อยเท่ากับ RAM ของคุณ
ไม่มีอัลกอริธึมเดียวที่จะบอกคุณว่าคุณต้องการแลกเปลี่ยนมากแค่ไหน ในทางปฏิบัติคุณต้องทำให้ระบบของคุณมีภาระมากที่สุดที่คุณวางแผนจะให้การสนับสนุนและค้นหาว่าทรัพยากรใช้งานจริงเพียงใด ตั้งค่าไฟล์ swap ของคุณ
สำหรับแรมจริงคุณควรวางระบบของคุณภายใต้ภาระ "ล่องเรือ" ที่คุณคาดหวังว่าจะจัดการและซื้อให้เหมาะสม สำหรับระบบที่มีความหน่วงต่ำคุณไม่ควรสลับในการโหลดข้อมูลการล่องเรือของคุณ (ซึ่งไม่เหมือนกับการไม่มีการจัดสรร swap หรือแม้กระทั่งการใช้งาน) การแลกเปลี่ยนจำนวนเล็กน้อยอาจเกิดขึ้นเนื่องจากระบบสาธารณูปโภคที่ใช้เพียงเล็กน้อย แต่โดยมากคุณควรมีการแลกเปลี่ยนน้อยที่สุด
แน่นอนคุณสามารถแลกเปลี่ยนประสิทธิภาพเพื่อลดราคา