ระบบ Linux บางระบบช้ามากเมื่อ Redis โหลดชุดข้อมูลขนาดใหญ่


14

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

ปัญหา:

  • เคอร์เนล: "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP พฤ. 15 เม.ย. 08:05:38 UTC 2010 x86_64 GNU / Linux"
  • RAM ว่างจำนวนมากไม่มีกระบวนการอื่นที่ทำ I / O อย่างมีนัยสำคัญ
  • สิ่งสำคัญทำงานบนอินสแตนซ์ขนาดใหญ่ EC2 ไม่ใช่เซิร์ฟเวอร์จริง ฉันไม่เคยเห็นอะไรแบบนี้มาก่อนในสภาพแวดล้อมที่ไม่มีการจำลองเสมือน อินสแตนซ์ EC2 คือ: "สูงหน่วยความจำขนาดใหญ่พิเศษอินสแตนซ์ 17.1 GB หน่วยความจำ 6.5 ECU (2 แกนเสมือนกับ 3.25 EC2 Compute หน่วยในแต่ละ), 420 GB ของการจัดเก็บเช่นแพลตฟอร์ม 64 บิตท้องถิ่น"

โดยทั่วไปเมื่อคุณรีสตาร์ทอินสแตนซ์ Redis ขนาดใหญ่ระบบจะทำงานช้าคุณจึงไม่สามารถพิมพ์บนเชลล์ได้อีกต่อไป เมื่อ Redis โหลดอินสแตนซ์จะใช้ CPU 100% (โหลดข้อมูลเร็วที่สุดเท่าที่จะทำได้) และอ่านไฟล์ dump.rdb ตามลำดับ I / O ไม่สูงโดยเฉพาะอย่างยิ่งการโหลดเป็น CPU-bound ไม่ I / O ที่ถูกผูกไว้

ทำไมในโลกถึงมีกล่องที่มีสองซีพียูและ RAM มากมายไม่มีการสับเปลี่ยนสิ่งใดบนดิสก์โดยทั่วไปควรหยุดทำงานกับภาระงานนี้หรือไม่

ฉันรู้สึกว่ามันมีส่วนเกี่ยวข้องกับความจริงที่ว่ามันเป็นอินสแตนซ์ EC2 ดังนั้นเกี่ยวข้องกับเทคโนโลยีการจำลองเสมือนที่ใช้ขณะที่ฉันโหลดชุดข้อมูล Redis 24 GBในกล่องของฉันตลอดเวลาโดยไม่มีปัญหาใด ๆ (แม้แต่อินสแตนซ์อื่นของ Redis วิ่งด้วยโหลดสูง)

ขอบคุณสำหรับคำใบ้ใด ๆ !

Salvatore

แก้ไข : เพิ่มข้อเสนอแนะบางอย่างที่ฉันได้รับจาก twitter:

จาก @ezmobius: @antirez สิ่งแรกที่ต้องทำคือลองจาก / mnt หรือไดรฟ์ ephemeral ในพื้นที่เพื่อดูว่า EBS ของมันเกิดความสะเพร่าหรือไม่ 2 คือเพื่อให้แน่ใจว่าไม่ใช่ "โทษขั้นแรก" (google it) และหากเป็นเช่นนั้น คุณต้อง dd 0 ข้ามดิสก์ก่อน

จาก @dvirsky: @antirez ฉันกำลังเรียกใช้อินสแตนซ์ redis จำนวนมากบนโหนด ec2 เช่นนั้น ฉันสังเกตเห็นการชะลอตัวของ bgsave แต่ไม่ใช่ปรากฏการณ์นี้

คำตอบ:


4

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

ไม่แน่ใจว่าเป็นปัญหาของคุณหรือไม่ แต่เป็นการตรวจสอบที่คุ้มค่า


ขอบคุณเควินนี่น่าสนใจมากและฉันก็ไม่รู้ตัวเลย
antirez

2

ฉันมีปัญหาเดียวกันกับอินสแตนซ์ EC2 อาจไม่เกี่ยวข้องกับ Redis - มันเกิดขึ้นเมื่อมี IO สูงเกิดขึ้น (เช่นเมื่อ redis กำลังโหลดไฟล์ดัมพ์)

ดูหัวข้อนี้ในฟอรัม amazon: https://forums.aws.amazon.com/thread.jspa?messageID=215406

ฉันทดลองกับเมล็ด / ภาพต่าง ๆ และตอนนี้ก็ทำงานได้ดี (บนเคอร์เนล 2.6.21 เก่า)


ขอบคุณ mhdk ฉันเดาว่าสิ่งนี้เกี่ยวข้องกับ virtualization + Linux scheduler แม้ว่า I / OI ของดิสก์ที่ช้าจะไม่สามารถมองเห็นเหตุผลใด ๆ ที่ทำให้กระบวนการอื่น ๆ ปิดกั้นหากพวกเขาไม่ได้ใช้ดิสก์และไม่มีการสลับหน้า การลองใช้การกำหนดค่าเมล็ด / กำหนดการที่แตกต่างกันน่าจะคุ้มค่าที่จะลองแน่นอน
antirez

2

คุณควรตรวจสอบ CPU steal ( xx.x%stทางด้านขวาของบรรทัด cpu) ที่topแสดงเมื่อคุณพบโหลด 100% และ Frozen shell Steal แสดงจำนวนรอบ CPU จริงของคุณที่ถูกขโมยจากเครื่องของคุณโดย hypervisor และมอบให้กับเครื่องอื่น CPU steal เกี่ยวข้องเฉพาะในสภาพแวดล้อมเสมือนจริงเท่านั้น ฉันมีปัญหาที่แน่นอนกับอินสแตนซ์ขนาดเล็กและโดยทั่วไปซึ่งทำให้อินสแตนซ์ของฉันไม่สามารถใช้งานได้ประมาณ 1 ชั่วโมงหรือมากกว่านั้น (จนกว่างานของฉันจะเสร็จสิ้น) หากทำ CPU อย่างเข้มข้น

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

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