คุณ/proc/sys/vm/overcommit_memory
ตั้งค่าอะไร จากเอกสารเคอร์เนล:
0 - Heuristic overcommit handling. Obvious overcommits of
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
allocate slightly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
applications.
2 - Don't overcommit. The total address space commit
for the system is not permitted to exceed swap + a
configurable percentage (default is 50) of physical RAM.
Depending on the percentage you use, in most situations
this means a process will not be killed while accessing
pages but will receive errors on memory allocation as
appropriate.
ดังนั้นหากคุณใช้ 1 จะไม่มีความแตกต่าง หากคุณใช้ 2 และไม่มีไฟล์สลับ linux ดังนั้นกระบวนการจะไม่สามารถจัดสรรหน่วยความจำ (เสมือน) 512M ผลลัพธ์ไม่ชัดเจนสำหรับ 0
แก้ไข: จากhttp://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommitนี่คือวิธีที่ 0:
Heuristic overcommit พยายามที่จะคำนวณจำนวนหน่วยความจำที่ระบบสามารถให้กับคุณได้หากหน่วยความจำทั้งหมดสามารถเรียกคืนได้และไม่มีกระบวนการอื่นใดที่ใช้ RAM มากกว่าที่เป็นอยู่ในปัจจุบัน หากคุณขอมากกว่านี้การจัดสรรของคุณจะถูกปฏิเสธ โดยเฉพาะอย่างยิ่งตัวเลข 'หน่วยความจำว่าง' ในทางทฤษฎีคำนวณโดยการเพิ่มพื้นที่ว่างในการแลกเปลี่ยนฟรี, RAM ว่าง (น้อยกว่า 1 / 32nd ถ้าคุณไม่ใช่รูท), และพื้นที่ทั้งหมดที่ใช้โดยแคชบัฟเฟอร์แบบครบวงจรและข้อมูลเคอร์เนล (หักบางหน้าที่สงวนไว้)
ดังนั้นมันจึงใช้ swap ในการคำนวณเช่นกัน โดยทั่วไปฉันจะทำตามคำแนะนำ RHEL ของ:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2