Memory
過度送出記憶體失敗而未達到實際 RAM 的一半
我正在執行帶有 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”允許過度使用並且有利於性能。