Поправка: Дошло је до грешке током иницијализације ВМ-а, није могао резервисати довољно простора за гомилу објеката

Иако Јава аплети данас нису популарна веб технологија, постоји безброј разлога за постављање Јава виртуелне машине директно на Линук сервер. Ако покушате изравно покренути Линук јава наредбу било на дискретном хардверу или унутар сопственог ВМ-а, можда ћете добити поруку „дошло је до грешке током иницијализације ВМ-а, није могао резервисати довољно простора за гомилу објеката“.

Ово вероватно изгледа прилично чудно јер више него вероватно имате довољно РАМ-а за покретање наредбе, али то је углавном због специфичне хировитости у начину на који се странице физичке и виртуелне меморије користе. Одређивање неких релативно великих величина требало би да вам омогући да у потпуности заобиђете ову поруку и покренете јава наредбу онако како бисте је урадили.

1. метод: Коришћење опција командне линије

Ако сте покушали да покренете јаву и добили сте ову поруку, онда сте вероватно већ покренули бесплатну команду да бисте се уверили да постоји довољно меморије за покретање програма.

јава и бесплатне команде

Приметите да смо на нашој тест машини имали око 2,3 ГБ физичке РАМ меморије и да се још увек није искористила ниједна страница виртуелне меморије. Ако приметите да имате грешку у меморији, желећете да затворите друге ствари које сте покренули пре него што покушате поново. С друге стране, они који су открили да имају довољно слободне меморије могу покушати да директно одреде величину.

На пример, на нашој машини смо могли да покренемо команду као јава -Ксмс256м -Ксмк512М и радила је као што би се иначе очекивало. Ово ограничава величину гомиле коју Јава виртуелна машина покушава резервисати приликом покретања. Будући да необуздана виртуелна машина хипотетички може да ради необичне ствари, могла би да шаље поруке о грешкама на иначе бесплатан систем. Можда ћете желети и да се поиграте са те две вредности пре него што пронађете праву комбинацију.

Ово може бити проблем без обзира на чему га покрећете, јер ЈВМ нема никакве везе са типом ВМ-а који можда користите за покретање ГНУ / Линук-а.

2. метод: Извоз променљивих да би промена била трајна

Када пронађете вредност која функционише, можете је извести да би постала трајна за ту сесију. На пример, користили смо извоз _ЈАВА_ОПТИОНС = '- Ксмс256М -Ксмк512М' из басх командне линије и то нам је омогућило да сами покренемо јава наредбу без икаквих других опција док се не одјавимо са сервера.

Требало је да се поново покрене када смо се пријавили у другу сесију, па ћете је можда можда желети додати било којој релевантној покретачкој скрипти ако планирате да користите јава команду прилично често. Додали смо ред у нашу .басх_логин датотеку и чинило се да ради сваки пут када смо користили упит за пријаву без потребе да га поново покренемо, мада ћете можда морати да пронађете другу локацију за њега ако радите са другом љуском.

Можда сте приметили да само одређене конфигурације хардвера покрећу ову поруку о грешци. То је зато што се то обично дешава на машинама са великом количином физичке РАМ меморије, али нижим ограничењима како се користи. Јава ће покушати да додели огроман блок само да би јој се рекло да не може, што тумачи као понестајање меморије.

3. метод: Штампање тренутних Јава опција

Ако сте радили у командној линији и желите брзу референцу на оно што сте тренутно поставили на вредност _ЈАВА_ОПТИОНС, онда једноставно покрените ецхо $ _ЈАВА_ОПТИОНС и он ће одмах исписати тренутне вредности. Ово је корисно за решавање проблема када покушавате да откријете праве бројеве за покушај.

Имајте на уму да, иако ово исправљање не би требало да захтева било какво друго играње, Јава ће избацити поруку „нисам могао резервисати довољно простора за хрпу објеката“ ако се икада искрено нађете на кратком крају виртуелне меморије. Ако је то случај, онда ћете желети још једном да проверите који су процеси тренутно покренути и можда поново покренете сервер ако је то опција. Можете и да направите више простора за замену, али ако је ово проблем, обично је боље покушати то исправити на неки други начин.

У ретким случајевима када се чини да су ваша подешавања исправна, али и даље не раде, уверите се да сте инсталирали 64-битни Јава пакет, јер би требало да буде имун на овај проблем. Непрекидни захтеви за меморијом важе само за 32-битну верзију Јаве. Пронашли смо у неколико случајева да је 64-битна верзија покушала да створи 32-битну виртуелну машину, тако да смо је одредили у опцији -д64 у командној линији.