playframework - IOException не может выделить память - PullRequest
9 голосов
/ 20 марта 2012

Моя система - Mint 12 64bit.

Я установил стек типов безопасных и создал новое игровое приложение.Не изменяя код, я попытался запустить его.Это вывод:

http://pastebin.com/6XwmsbAE

Play жалуется на это сообщение об ошибке:

IOException: Cannot run program "javac": java.io.IOException: error=12, Cannot allocate memory 

Как это исправить?

ОБНОВЛЕНИЕ:

@ Mef

Хорошо, вы точно были правы.Я увеличил начальную оперативную память с 1 ГБ до 2 ГБ (работает на виртуальной коробке).Компиляция сработала ровно один раз.

К сожалению, Java решил, что даже 2 ГБ недостаточно: при запуске eclipse и firefox моя система использует 1 ГБ.Затем я запускаю sbt, и использование памяти возрастает примерно до 1,2 ГБ.Можно подумать, что этого достаточно.Это не так.Компиляция завершается с той же ошибкой, хотя 800 МБ по-прежнему доступны.Более того, после попытки скомпилировать приложение использование памяти возрастает до 1,6 ГБ.Как ни странно, даже при компиляции проекта он никогда не достигает 2 ГБ, но достигает пика около 1,8 ГБ.

Тем не менее, я попробовал еще раз и подал 3 гигабайта оперативной памяти на виртуальную машину.Теперь компиляция и запуск приложения работает нормально.Как еще одно чудо с доступными 3 ГБ, использование памяти никогда не поднимается выше 1,6 ГБ и остается намного ниже максимального уровня 1,8 ГБ, который я видел в итерации 2 ГБ.

Ответы [ 3 ]

17 голосов
/ 11 ноября 2012

На самом деле это не совсем системная ошибка: настройка файлов конфигурации воспроизведения позволит вам заставить его работать в системе с объемом памяти менее 1 ГБ.

In play-2.0.4/framework/build (или build.bat), вам просто нужно изменить

java ${DEBUG_PARAM} -Xms512M -Xmx1536M ...

на

java ${DEBUG_PARAM} -Xms128M -Xmx512M ...

Теперь могут быть другие проблемы при воспроизведении с меньшим объемом памяти, но по крайней мере базовая настройка работает.

3 голосов
/ 20 марта 2012

Так как это общая ошибка javac, я сомневаюсь, что это связано с Play. Скорее всего, вам действительно не хватило памяти.

1 голос
/ 14 мая 2013

Это очень хорошо описано в другом посте, и, похоже, это проблема с OpenJDK.

Как решить "java.io.IOException: error = 12, Cannot распределять память", вызывая Runtime#exec ()?

Попробуйте следующее:

# echo 1 > /proc/sys/vm/overcommit_memory

Это сработало для меня: -)

...