Memory

過度送出記憶體失敗而未達到實際 RAM 的一半

  • June 4, 2013

我正在執行帶有 2.6.32-358.6.2.el6.x86_64 的 centos 6.4,它實際上是作為 xen vm 執行的

記憶體 2 GB

在這個我已經設置

cat /proc/sys/vm/overcommit_memory  
2

但是當我嘗試啟動我的 java 應用程序時,它的顯示

java.io.IOException: Cannot run program "/bin/bash": java.io.IOException: error=12, Cannot allocate memory
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory

但實際上這台機器有 1.5 GB 的可用記憶體。

當我設置

echo 0 > /proc/sys/vm/overcommit_memory

一切正常,

我考慮過送出記憶體允許我使用更多的虛擬記憶體(交換+真實記憶體),但為什麼即使使用更多免費的真實記憶體也會失敗。

指南:

2 — 核心失敗的記憶體請求加起來等於所有交換加上 /proc/sys/vm/overcommit_ratio 中指定的物理 RAM 的百分比。此設置最適合那些希望減少記憶體過度使用風險的人。

如果您的交換空間少於 2 GB,那麼如果 overcommit_ratio 設置得太低,核心將拒絕該請求。將其設置為“1”允許過度使用並且有利於性能。

引用自:https://serverfault.com/questions/513134