Назад | Перейти на главную страницу

Ошибка чрезмерного выделения памяти без достижения половины фактического объема ОЗУ

Я использую 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», это позволяет чрезмерно загружать ресурсы и хорошо сказывается на производительности.