Я использую centos 6.4 с 2.6.32-358.6.2.el6.x86_64, который фактически работает как xen vm с
оперативная память 2 ГБ
На этом я установил
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 ГБ свободной памяти.
когда я установил
echo 0 > /proc/sys/vm/overcommit_memory
Все работает нормально,
Я подумал о том, что выделение памяти позволяет мне использовать больше виртуального барана (подкачка + реальный барабан), но почему он не работает даже с большим количеством свободного реального барана.
Из этот руководство:
2 - Ядро не выполняет запросы на память, которые в сумме составляют весь своп плюс процент физической ОЗУ, указанный в / proc / sys / vm / overcommit_ratio. Этот параметр лучше всего подходит для тех, кто хочет снизить риск чрезмерной загрузки памяти.
Если у вас меньше 2 ГБ подкачки, то ядро отклонит запрос, если overcommit_ratio установлено слишком низко. Если для него установлено значение «1», это позволяет чрезмерно загружать ресурсы и хорошо сказывается на производительности.