เราใช้ MongoDB เป็นเวลาหลายสัปดาห์แล้วแนวโน้มโดยรวมที่เราเห็นคือ mongodb ใช้หน่วยความจำมากเกินไป (มากกว่าขนาดของชุดข้อมูล + ดัชนีทั้งหมด)
ฉันได้อ่านคำถามนี้แล้วและคำถามนี้แต่ดูเหมือนจะไม่มีใครตอบปัญหาที่ฉันพบพวกเขากำลังอธิบายสิ่งที่อธิบายไว้ในเอกสารแล้ว
ต่อไปนี้เป็นผลลัพธ์ของhtopและแสดงคำสั่งdbs
ฉันรู้ว่า mongodb ใช้หน่วยความจำที่แมป IO ดังนั้นโดยทั่วไประบบปฏิบัติการจะจัดการกับการแคชสิ่งต่าง ๆ ในหน่วยความจำและ mongodb ในทางทฤษฎีควรปล่อยหน่วยความจำแคชในทางทฤษฎีเมื่อกระบวนการอื่นร้องขอหน่วยความจำที่ว่างแต่จากสิ่งที่เราเห็น
OOM เริ่มฆ่ากระบวนการที่สำคัญอื่น ๆ เช่น postgres, redis และอื่น ๆ (ดังที่เห็นได้ว่าเพื่อเอาชนะปัญหานี้เราได้เพิ่ม RAM เป็น 183GB ซึ่งตอนนี้ใช้งานได้ แต่มีราคาแพงมาก mongo ใช้ ram ~ 87GB เกือบ 4X ของขนาดของชุดข้อมูลทั้งหมด)
ดังนั้น,
- นี่เป็นการใช้งานหน่วยความจำมากมายที่คาดหวังและปกติหรือไม่? (ตามเอกสารประกอบ WiredTiger ใช้ RAM ส่วนใหญ่ประมาณ ~ 60% สำหรับแคช แต่เมื่อพิจารณาขนาดชุดข้อมูลแล้วยังมีข้อมูลเพียงพอที่จะใช้ RAM ขนาด 86GB ได้หรือไม่)
- แม้ว่าคาดว่าจะมีการใช้หน่วยความจำทำไม mongo ไม่ปล่อยหน่วยความจำที่จัดสรรในกรณีที่กระบวนการอื่นเริ่มร้องขอหน่วยความจำเพิ่มเติม กระบวนการทำงานอื่น ๆ อีกมากมายถูก linux oom ถูกฆ่าอย่างต่อเนื่องรวมถึง mongodb เองก่อนที่เราจะเพิ่มแรมและมันทำให้ระบบไม่เสถียรอย่างสมบูรณ์
ขอบคุณมาก!