ฉันควรปิด swap สำหรับเว็บเซิร์ฟเวอร์ linux หรือไม่


22

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

อาร์กิวเมนต์ของเขาคือว่าในเซิร์ฟเวอร์สถานการณ์ปกติจะไม่ใช้ RAM ทั้งหมดดังนั้นวิธีเดียวที่จะสามารถพบสถานการณ์ OutOfMemory ได้เนื่องจากบั๊ก / ddos ​​/ etc ดังนั้นในกรณีที่ swap ถูกปิดระบบจะมีหน่วยความจำไม่เพียงพอซึ่งจะทำให้หน่วยความจำของโปรแกรมหยุดทำงานชั่วคราว (เป็นไปได้มากว่ากระบวนการเซิร์ฟเวอร์เว็บ) และกระบวนการอื่น ๆ ในกรณีที่มีการเปิดการแลกเปลี่ยนบนมันจะกินทั้ง RAM และ swap และในที่สุดจะส่งผลให้เกิดความผิดพลาดเหมือนกัน แต่ก่อนหน้านั้นมันจะถ่ายกระบวนการที่สำคัญเช่น sshd เพื่อสลับและเริ่มทำการแลกเปลี่ยนจำนวนมากซึ่งทำให้เกิดการชะลอตัวครั้งใหญ่ วิธีนี้เมื่ออยู่ภายใต้ระบบ ddos ​​อาจเข้าสู่สภาพที่ใช้ไม่ได้อย่างสมบูรณ์เนื่องจากความล่าช้ามากและฉันอาจจะไม่สามารถเข้าสู่ระบบและฆ่ากระบวนการเว็บเซิร์ฟเวอร์หรือปฏิเสธการรับส่งข้อมูลที่เข้ามาทั้งหมด (ทั้งหมดยกเว้น ssh)

ถูกต้องหรือไม่ ฉันทำบางสิ่งบางอย่างหายไป (เช่นข้อเท็จจริงที่ว่าการสลับพาร์ติชั่นนั้นมีประโยชน์อย่างมากแม้ว่าฉันจะมี RAM เพียงพอ) ฉันควรปิดหรือไม่


6
ดังนั้นคำตอบทั้งหมดจะลดลงไปจนถึงข้อความที่ 1. หน่วยความจำเสมือนเพิ่มเติมนั้นดีกว่าไม่มีเงื่อนไขน้อยกว่าและ 2. ต้องมีการเปิดใช้งานการสลับบางอย่างเพราะมันไม่ดี
NekojiruSou

2
มันมีความเข้าใจผิดที่คิดว่าการแลกเปลี่ยนนั้นมีไว้สำหรับหน่วยความจำ 'สำรอง' เท่านั้น Swap มีไว้สำหรับสถานที่ที่จะนำหน่วยความจำที่ไม่ได้ใช้ (เพื่อให้คุณสามารถใช้หน่วยความจำจริงได้อย่างมีประสิทธิภาพ) คุณควรมี swap หากหน่วยความจำไม่เพียงพอจะทำให้หน่วยความจำไม่เพียงพอ - ช่วงเวลา นี่เป็นปัญหาของการจัดการความจุ - ไม่ใช่แนวโน้มที่จะเปลี่ยน ฉันมีserverfault.com/a/332205/75118ตอบสนองค่อนข้างนานซึ่งพยายามอธิบายความตั้งใจของหน่วยความจำเสมือนได้ดีขึ้น
แมทธิว Ife

คำตอบ:


27

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

แต่ให้ฉันตอบด้วยคำถามเชิงโวหาร หากเงินไม่ใช่ปัญหาและคุณมีทางเลือกระหว่างสองระบบ - ระบบหนึ่งที่มี RAM 12G และ 4G ของการแลกเปลี่ยนและอีกระบบหนึ่งที่มี RAM 16G และไม่มีการแลกเปลี่ยน - คุณต้องการเลือกแบบใด น่าเสียดายที่คนส่วนใหญ่ยังคงตอบว่าพวกเขาต้องการเลือก 16G of RAM และยังเพิ่ม 4G ของการแลกเปลี่ยนซึ่งไม่มีจุดของฉัน

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


14

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

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

ฉันพบหน้านี้พูดคุยเกี่ยวกับการแลกเปลี่ยน ดูที่ส่วนที่ 3

แทนที่จะปิดการสลับคุณสามารถควบคุมการสลับได้


1
ในสถานการณ์ที่ฉันอธิบายว่ามันจะใช้ทั้ง swap และ RAM และจะพัง ใช้งานได้สองสามเดือนและไม่เคยใช้หน่วยความจำมากกว่า 30% ดังนั้นจึงเป็นไปได้ยากมากที่จะกระโดดได้ถึง 100% อย่างรวดเร็วในระหว่างการทำงานปกติ ดังนั้นหากกระบวนการบางอย่างบ้าคลั่งและใช้ 8GB ก็หมายความว่ามันจะใช้หน่วยความจำมากที่สุดเท่าที่ระบบปฏิบัติการจะได้รับนั่นหมายความว่ามันทั้งหมด
Poma

@Poma มีข้อดีของการแลกเปลี่ยนเช่นกัน นอกจากนี้คุณสามารถอนุญาตให้ระบบใช้งานได้นานขึ้นเมื่อคุณมีการแลกเปลี่ยน เนื่องจาก swap สามารถมีขนาดใหญ่กว่าหน่วยความจำเนื่องจากความพร้อมใช้งานของไดรฟ์ HD ราคาถูก
เลด

6

ไม่มันไม่ใช่ความคิดที่ดี 'กระบวนการบางอย่างบ้าคลั่ง' หมายความว่าคุณควรจะเรียกล่วงหน้าแล้ว

ulimit -d

ที่หรือก่อนเวลาสร้างกระบวนการเพื่อกำหนดขีด จำกัด บนต่อหน่วยความจำเซกเมนต์ข้อมูลกระบวนการ - และอาจ จำกัด จำนวนเธรด

ulimit -T

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

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


5

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

คุณสามารถดูสิ่งที่ตั้งไว้ในปัจจุบันด้วย:

cat /proc/sys/vm/swappiness

และคุณสามารถแก้ไขได้ "สด" ด้วย (เป็น root):

# echo "10" > /proc/sys/vm/swappiness

และเพื่อให้คงอยู่ให้เพิ่มสิ่งต่อไปนี้ลงใน /etc/sysctl.conf:

vm.swappiness=10

2

อีกสิ่งที่ดีที่คุณสามารถทำได้คือเปลี่ยนเป็น RAM โดยใช้ zRAM ฉันคิดว่านี่เป็นความคิดที่ยอดเยี่ยม! เพื่อประสิทธิภาพการทำงานก็เหมือนไม่มีการสลับเลย แต่ยังป้องกันการล่มเมื่อระบบโหลดมาก!

ดูนี่สิ:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

ประสบการณ์ของฉัน: ในเครื่องที่ฉันเขียนอยู่ตอนนี้ฉันปิดการแลกเปลี่ยนเพราะฉันมี 4Gb RAM (ในปี 2009 มันเยอะมาก!) ฉันพบปัญหาเพียงไม่กี่ข้อหนึ่งในนั้นคือรูปภาพที่เปิดในเวลาเดียวกันโดยไม่ได้ตั้งใจ 127 รูป!

แต่ .. นี่คือเวิร์กสเตชันและฉันสามารถที่จะรีบูทถ้ามันค้าง ในเซิร์ฟเวอร์ฉันคิดว่าดีกว่าที่จะมี swap และ swap-in-RAM ฟังดูดีสำหรับฉัน


1

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


0

ไม่ใช่ความคิดที่ดี คุณสามารถกำหนด 2 ไฟล์สลับที่มีลำดับความสำคัญต่างกัน เล็กกว่าหนึ่งที่ใช้งานอยู่และเล็กกว่าหนึ่งอันที่จะใช้ในกรณีที่การเติมครั้งแรก

นอกจากนี้ vm.swappiness สามารถช่วยคุณควบคุมวิธีการแลกเปลี่ยนดิสก์ที่เกิดขึ้น


0

หากคุณแทรก 0 ถึง vm.swappiness ซึ่งไม่ได้แปลว่าระบบจะไม่ทำการสลับ มันเป็นพารามิเตอร์ในการพิจารณาว่าแนวโน้มของ kerne ในเชิงรุกจะเปลี่ยนได้อย่างไร แต่ไม่ได้ปิดการสลับ

การสลับสับเปลี่ยนก็ไม่ได้เลวร้ายอะไร ลองดูข้อมูล sysstat และควรให้ตัวชี้ที่ดีงาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.