การจัดสรรหน้าล้มเหลว - ฉันมีหน่วยความจำไม่เพียงพอหรือไม่


24

เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นรายการเช่นนี้ในkern.logเซิร์ฟเวอร์ของฉัน:

Feb 16 00:24:05 aramis kernel: swapper: page allocation failure. order:0, mode:0x20

ฉันอยากรู้:

  1. ข้อความนั้นหมายความว่าอะไร?
  2. เซิร์ฟเวอร์ของฉันมีหน่วยความจำไม่เพียงพอหรือไม่

การใช้ swap ค่อนข้างต่ำ (น้อยกว่า 10%) และจนถึงตอนนี้ฉันไม่ได้สังเกตเห็นว่ากระบวนการใดถูกฆ่าเนื่องจากขาดหน่วยความจำ

ข้อมูลเพิ่มเติม:

  • เซิร์ฟเวอร์เป็นอินสแตนซ์ Xen (DomU) ที่เรียกใช้ Debian 6.0
  • มี RAM 512 MB และพาร์ติชัน swap 512 MB
  • โหลด CPU ภายในเครื่องเสมือนแสดงค่าเฉลี่ย 0.25

คำตอบ:


14

Debian bug 666021ดูเหมือนจะเป็นรายงานของปัญหาเดียวกันนี้ ข้อเสนอแนะคือ:

#change value for this boot
sysctl -w vm.min_free_kbytes=65536

#change value for subsequent boots
echo "vm.min_free_kbytes=65536" >> /etc/sysctl.conf

http://russ.garrett.co.uk/2009/01/01/linux-kernel-tuning/มีการอภิปรายเมื่อการเปลี่ยนแปลงการตั้งค่านี้อาจเป็นประโยชน์ทำซ้ำที่นี่:

สิ่งนี้บอกให้เคอร์เนลพยายามรักษา RAM ให้ว่าง 64MB ตลอดเวลา มันมีประโยชน์ในสองกรณีหลัก:

  • เครื่อง Swap-less ที่คุณไม่ต้องการให้ทราฟฟิกเครือข่ายเข้ามาครอบงำเคอร์เนลและบังคับ OOM ก่อนที่จะมีเวลาล้างบัฟเฟอร์ใด ๆ

  • เครื่องจักร x86 ด้วยเหตุผลเดียวกัน: สถาปัตยกรรม x86 อนุญาตการถ่ายโอน DMA ที่ต่ำกว่า RAM ขนาด 900MB เท่านั้น ดังนั้นคุณสามารถจบลงด้วยสถานการณ์ที่แปลกประหลาดของข้อผิดพลาด OOM พร้อม RAM จำนวนมากฟรี

ฉันใช้การตั้งค่านี้กับเครื่อง 3.2.12-gentoo x86 ของฉัน แต่ฉันยังคงได้รับข้อผิดพลาดเหล่านี้


สิ่งเดียวกันนี้สามารถเกิดขึ้นได้กับอุปกรณ์บางอย่างเช่นกับตัวควบคุม MPT Fusion SCSI ขอแนะนำให้เก็บ vm.min_free_kbytes ประมาณ 100 เมกะไบต์ หรืออย่างน้อยก็เคยเป็นเมื่อฉันต้องใช้สิ่งเหล่านั้นกับ distros Linux 32 บิต สิ่งต่าง ๆ อาจมีการเปลี่ยนแปลงตั้งแต่นั้นมา
Janne Pikkarainen

คำเตือนสำคัญecho 104857600 > /proc/sys/vm/min_free_kbytes ทำให้ระบบของฉันกลายเป็น KERNEL PANIC ทำซ้ำได้ ข้อความบางส่วนบินขึ้นมาบนหน้าจอในขั้นตอนที่ฉันไม่มีความหวังในการอ่าน แต่ข้อความสุดท้ายเกี่ยวกับดองเกิล Wi-Fi ของฉันดังนั้นความแตกแยกนี้อาจเฉพาะกับระบบของฉัน ที่ถูกกล่าวว่ากระตุ้นด้วยความระมัดระวัง
i336_

โอ้มันในกิโลไบต์ ฉันจำไม่ได้เป็นรูปธรรมถ้าฉันทำ 104857600 หรือ 10485760 แต่ถ้าฉันทำแบบเดิมฉันพยายามจอง 100GB ซึ่งแล็ปท็อปนี้ไม่ได้ติดตั้ง;) ฉันจะลองเล่นซอกับเรื่องนี้ใน VM
i336_

1

ฉันเพิ่งทำงานผ่านข้อผิดพลาดนี้ใน Lenovo NAS ที่ใช้ Debian 5 และเคอร์เนล 2.6.39.3 64 บิต

ข้อความเหล่านี้เป็นข้อมูลแม้จะดูน่ากลัวก็ตามตามhttps://www.novell.com/support/kb/doc.php?id=7002803

อย่างไรก็ตามพวกเขาเติมพาร์ติชั่นรูทของฉันที่ จำกัด มาก (อุปกรณ์นี้มีพาร์ติชั่นรูท 50 MByte?!)

การแก้ไขสำหรับผมก็คือการตั้งค่าvm.min_free_kbytesจากลงไป 6553616384

หลังจากนั้นระบบปฏิบัติการยังคงมีหน่วยความจำว่าง 107 MBytes และบัฟเฟอร์ 2 GB มันไม่สมเหตุสมผล แต่มันหยุดการบันทึกทั้งหมด


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