เราต้องการ Swap พาร์ติชั่นบนเซิร์ฟเวอร์ LAMP หรือไม่?


14

เราจำเป็นต้องสลับพาร์ติชั่นจริง ๆ บน ubuntu-server กับ LAMP หรือไม่? ฉันคิดว่าฉันไม่ต้องการมัน แต่ควรจะรู้ไว้ดีกว่าถ้ามันจะไม่ทำให้เกิดพฤติกรรมที่ไม่ได้คาดการณ์ไว้
อันที่จริงความคิดของฉันคือ:

  • เซิร์ฟเวอร์ไม่จำศีล
  • หากมีการแลกเปลี่ยนเราต้องคิดถึงการปรับสมดุลภาระ / การสร้างการจราจร ฯลฯ ...

ฉันถูกต้องฉันสามารถปิดการแลกเปลี่ยนสำหรับเซิร์ฟเวอร์การผลิตได้หรือไม่

ขอบคุณ!

คำตอบ:


14

ฉันถูกต้องฉันสามารถปิดการแลกเปลี่ยนสำหรับเซิร์ฟเวอร์การผลิตได้หรือไม่

ไม่ต้องมีพื้นที่สว็อปเสมอ

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

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

ในโลกของฉันการแตกสลายยิ่งแย่กว่าช้า

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


เพื่อตอบสนองต่อความคิดเห็นจาก SpamapS:

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

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

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

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

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


ประสบการณ์แบบเดียวกันนี่ ... มันเป็นความผิดพลาดในด้านของฉันไม่ใช่การตัดสินใจโดยเจตนา เซิร์ฟเวอร์ที่ไม่มีการแลกเปลี่ยนเป็นสิ่งที่ต้องแก้ไขเป็นพิเศษหากตัดสินใจที่จะฆ่า sshd
Javier Rivera

ฉันมี RAM ประมาณ 16Gb ครึ่งหนึ่งถูกแคชไว้อย่างรวดเร็วสำหรับ IO ส่วนที่เหลือสำหรับ LAMP การแลกเปลี่ยนจะฟรีเสมอหรือบางครั้งมี megs ไม่กี่ครั้ง แต่ฉันคิดว่ามันจะปิดเสมอ ...
Arman

3
ในโลกของเว็บไซต์ที่ประสบความสำเร็จการไม่ตอบสนองนั้นเลวร้ายยิ่งกว่าเสีย ผู้ใช้จะได้ชื่นชมกับความล้มเหลวของ FAST (ซึ่งโค้ดส่วนหน้าของจาวาสคริปต์ของคุณควรจะจัดการ btw ได้อย่างสง่างาม) แต่พวกเขาจะเกลียดคุณเพราะการทำงานช้า ทิ้งการแลกเปลี่ยนมันแค่หน่วงเวลาที่จะหลีกเลี่ยงไม่ได้ -1
SpamapS

1
@Oli: การใช้ N + 1 จะไม่ใช้ megabucks อีกต่อไปหรือแม้กระทั่งเงินจำนวนมาก ในความเป็นจริงมันแทบจะไม่ได้ใช้ทักษะพิเศษ มันหลีกเลี่ยงไม่ได้ที่เซิร์ฟเวอร์จะลดลงด้วยเหตุผลหลายประการและไม่ยากที่จะป้องกันไม่ให้เกิดปัญหา หากคุณมีเซิร์ฟเวอร์ LAMP แบบสแตนด์อโลนที่ทำทุกอย่างแล้วมีค่าใช้จ่ายอะไรเพิ่ม การตั้งค่าอีกสองตัวและตัวโหลดบาลานซ์ (บน EC2 ที่มีสแน็ปช็อต t1.micros และ EBS สิ่งนี้อาจมีราคาถูกมาก) หรือเว็บไซต์ของคุณทำงานช้าในวันที่ยิ่งใหญ่ที่สุด? ตรวจสอบข้อมูลจาก Google ... ฉันคิดว่าชัดเจนbit.ly/hB1AD1
SpamapS

1
คำตอบที่ยอดเยี่ยมครอบคลุมกรณีเซิร์ฟเวอร์จริง การเพิ่มฮาร์ดแวร์ที่ซ้ำซ้อน, LB, การตรวจสอบ, แคช RAM และอื่น ๆ ล้วนมีความสำคัญอย่างเหลือเชื่อและคุณจะมีเวลาในการตั้งค่าและแก้ไขปัญหาหากคุณไม่ได้ซื้อขายเพราะคุณแลกพื้นที่แลกเปลี่ยน
ImaginaryRobots

4

ฉันไม่เห็นด้วยกับการสลับบนเซิร์ฟเวอร์ที่ใช้งานจริง

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

SSD swap เป็นกรณีพิเศษและอย่างน้อยก็จะลบเวลาค้นหาช้าลงซึ่งมักจะฆ่าระบบ อย่างไรก็ตามการเขียนยังคงช้าดังนั้นคุณจะยังต้องรอนานเป็นเวลานานในการกู้คืนจากกระบวนการควบคุม

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

หากคุณใช้ PHP ให้เปิดใช้งานขีด จำกัด หน่วยความจำและตรวจสอบบันทึกการทำงานของพวกเขาสำหรับความล้มเหลว นี่คือเคล็ดลับกำหนดขีด จำกัดล่างบนเซิร์ฟเวอร์ dev ของคุณมากกว่าในการผลิต หากคุณใช้ mod_php ภายใต้ apache ให้ตั้งค่า MaxRequestsPerChild เป็นสองสามพันเพื่อให้ httpd นั้นตายก่อนที่จะเติบโตมากเกินไปเมื่อเวลาผ่านไป เหนือสิ่งอื่นใดตรวจสอบการใช้งานหน่วยความจำ! บ่อยครั้งที่หน่วยความจำครีพขึ้นเมื่อเวลาผ่านไปและคุณเพียงแค่ต้องเริ่มบริการรั่วไหลเป็นระยะในขณะที่คุณแก้ปัญหา


1
ขอบคุณที่แบ่งปันประสบการณ์ของคุณ ฉันกำลังคิดถึงปัญหาที่คล้ายกันเมื่อฉันกำลังใช้ Inf ฉันแค่บังคับให้กระบวนการมีหน่วยความจำที่ จำกัด นั่นทำให้ฉันสามารถเรียกใช้ SSH และแก้ไขสคริปต์บั๊กกี้ได้
Arman

หนึ่งในการอภิปรายที่น่าสนใจที่สุดเกี่ยวกับพื้นที่สว็อปในการผลิตที่ฉันได้เห็นบนอินเทอร์เน็ต (เธรดทั้งหมด, โปร & cons)
dpb

3

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

สถานการณ์นี้จะเกิดขึ้นหลายครั้งในเซิร์ฟเวอร์

ก) สคริปต์ที่ไม่ได้รับการปรับให้เหมาะสมอาจใช้หน่วยความจำจำนวนมาก
ข) สคริปต์เช่นการสำรองข้อมูลจะใช้หน่วยความจำขนาดใหญ่เสมอ
c) จราจรหนาแน่น

ดังนั้นจึงเป็นการดีที่จะมีพื้นที่สว็อป

รายละเอียดเพิ่มเติม: https://help.ubuntu.com/community/SwapFaq


ขอบคุณสำหรับคำอธิบาย หากมีสคริปต์ buggy แล้วในกรณีใด ๆ คุณจะผิดพลาดเซิร์ฟเวอร์ขีด จำกัด ของระบบควรควบคุมสคริปต์ของคุณใช่หรือไม่
Arman

ถ้าคุณแลกเปลี่ยนในช่วงที่มีการจราจรหนาแน่นระบบของคุณจะช้ากว่าปกติ 100 เท่า โดยทั่วไปแล้วไม่เป็นที่ยอมรับ
SpamapS

2

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

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

มันไม่เสียค่าใช้จ่ายมากนักและถ้าคุณต้องการมันสักวันหนึ่งคุณจะดีใจที่ได้มันมา เหตุผลในการเปิดใช้งานการแลกเปลี่ยนเป็นเพียงการวิเคราะห์ผลประโยชน์ทางตรงไปตรงมามาก ทำมัน! :-)


0

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

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

ฉันจะสคริปต์นี้ทุกครึ่งชั่วโมงในสภาพแวดล้อมการผลิต มันจะส่งการแจ้งเตือนให้ฉันหากการใช้งาน Swap! = 0k ฉันจะสามารถตรวจสอบ / ดำเนินการกับปัญหาได้ทันทีโดยส่วนใหญ่ก่อนที่สิ่งต่าง ๆ จะผิดพลาดจริงๆ

คาดว่าคุณจะมี: bash, top, echo, awk และคำสั่งเมลที่ใช้งานได้โดยไม่ต้องทำการตรวจสอบใด ๆ

หวังว่าจะช่วย

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="your@email.addr"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.