คำสั่ง sync ทำหน้าที่อะไร?


15

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

sync && echo 3 > /proc/sys/vm/drop_caches

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


4
นั่นคือสองคำสั่ง เอฟเฟกต์ใดที่คุณสังเกตเห็น?
Michael Hampton

linuxtidbits.wordpress.com/2008/02/20/purge-memoryแนะนำให้ทำงานร่วมกันดังนั้นฉันจึงไม่รู้
j_mcnally

นี่คือการปรับปรุงอีกครั้งที่นี่: commandlinefu.com/commands/view/1026/…
j_mcnally

4
มันยากที่จะพูด. คุณจะไม่คาดหวังว่าคำสั่งเหล่านี้จะทำสิ่งที่มีประโยชน์บนเซิร์ฟเวอร์เว้นแต่ว่ามันจะผิดพลาดอย่างน่ากลัว แต่ไม่สามารถตัดออกได้โดยไม่ต้องศึกษาอย่างรอบคอบมากขึ้น ถ้ามันเกิดขึ้นอีกครั้งลองเพียงหรือเพียงแค่sync echoจากนั้นลองคิดดูว่าทำไมเซิร์ฟเวอร์ถึงช้าในกรณีที่การแก้ไขนี้ (CPU สูงสุดหรือไม่ IO สูงสุดหรือไม่เป็นเพจจิ้งของระบบหรือไม่)
David Schwartz

คำตอบ:


20

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

ทั้งนี้:

  • การทำงานman syncจะแจ้งให้คุณทราบว่าการซิงค์ทำอะไร [ฟลัชบัฟเฟอร์ FS]
  • googling 'linux drop_caches' จะบอกคุณว่าการสะท้อนหมายเลข 3 ลงไปนั้นจะเป็นการปล่อยหน้าหน่วยความจำที่ไม่จำเป็นทั้งหมดออกจากแคช [สิ่งนี้ไม่จำเป็นสำหรับระบบที่ดีต่อสุขภาพ]
  • command1 && command2 แบ่งไปที่ 'ถ้า command1 เสร็จสิ้นแล้วเรียกใช้ command2'
    • คู่ค้าสำหรับสิ่งนี้คือcommand1 || command2aka 'ถ้า command1 ล้มเหลวจากนั้นเรียกใช้ command2'

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


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

@j_mcnally EC2 หรือไม่ ถ้าอย่างนั้นฉันสามารถเดาได้ว่าอินสแตนซ์ของคุณมีลักษณะอย่างไร แต่อาจเป็นการรวมกันของปัจจัยต่างๆเช่น EBS ที่มีความไม่สม่ำเสมอสูงตลอดเวลาการจัดสรร RAM ขนาดเล็กและไม่มีพาร์ติชั่นสว็อป
Sammitch

ดังนั้นคุณกำลังบอกว่าวิธีการแก้ปัญหาอาจจะถูกต้องฮ่า ๆ ๆ ?
j_mcnally

@j_mcnally น่าเศร้าถ้าคุณไม่ได้อยู่ในอินสแตนซ์ที่ได้รับการเพิ่มประสิทธิภาพของ IO พันล้านดอลลาร์ต่อเดือน
Sammitch

5

AWS ไม่เหมาะสำหรับผู้ที่มีอาการใจอ่อนและคุณเพิ่งพบเหตุผลข้อใดข้อหนึ่ง สถานการณ์ I / O ของดิสก์ที่ไม่ดีใน AWS เป็นที่รู้จักกันดีและเป็นหนึ่งในปัจจัยสำคัญที่ต้องพิจารณาสำหรับทุกคนที่สร้างแอปพลิเคชันอยู่ด้านบน มีอินสแตนซ์ที่ปรับให้เหมาะสมกับดิสก์และลูกเล่นอื่น ๆ (เช่นการสร้าง RAID 0 จากโวลุ่ม EBS) ที่คุณสามารถลองปรับปรุงเรื่องต่างๆได้ ตรวจสอบให้แน่ใจว่าใช้อินสแตนซ์ที่ใหญ่กว่า (อย่างน้อย m1. Large) เพื่อให้แน่ใจว่าเคอร์เนลสามารถบัฟเฟอร์ I / O ของดิสก์


ใช่ใช้ m1. large เซิร์ฟเวอร์เหล่านี้หมุนตัวเข้ามาสำหรับแอพและจากนั้นก็ถูกทำลายลงในเวลาต่อมา ... ดังนั้นไม่แน่ใจเกี่ยวกับการลงทุนด้านเวลา ฯลฯ สำหรับดิสก์ io ฉันขอขอบคุณทุกคนที่ป้อนและข้อเสนอแนะดูเหมือนว่าการแก้ไขอาจ infact ถูกต้องแม้ว่าจะไม่ดีกว่า ขอบคุณอีกครั้ง.
j_mcnally
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.