Javítás: A virtuális gép inicializálása során bekövetkezett hiba nem tudott elegendő helyet lefoglalni az objektumkupac számára



Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére

Annak ellenére, hogy manapság a Java kisalkalmazások nem népszerűek az internetes technológiákban, számtalan oka van annak, hogy a Java virtuális gépet közvetlenül egy Linux szerverre telepítsék. Ha megpróbálja egyenesen futtatni a Linux java parancsot akár különálló hardveren, akár a saját virtuális gépén belül, akkor előfordulhat, hogy „egy hiba történt a virtuális gép inicializálása során nem tudott elegendő helyet lefoglalni az objektumkupac számára” üzenetet.



Ez valószínűleg meglehetősen furcsának tűnik, mivel több mint valószínű, hogy van elegendő RAM a parancs futtatásához, de ez nagyrészt annak köszönhető, hogy a fizikai és a virtuális memória oldalak szoktak használni. Néhány viszonylag nagy méret megadásával lehetővé kell tennie, hogy teljesen megkerülje ezt az üzenetet, és futtassa a java parancsot a többi módon.



1. módszer: A parancssori opciók használata

Ha megpróbálta futtatni a Java-t, és megkapta ezt az üzenetet, akkor valószínűleg már futtatta az ingyenes parancsot, hogy megbizonyosodjon arról, hogy elegendő memória található a program futtatásához.



java és ingyenes parancsok

Vegyük észre, hogy tesztgépünkön 2,3 GB fizikai RAM állt rendelkezésünkre, és egyetlen oldal virtuális memóriát sem használtunk még fel. Ha észreveszi, hogy memóriagörcse van, akkor az újbóli próbálkozás előtt le kell zárnia más futó dolgokat. Azok viszont, akik azt találták, hogy rengeteg szabad memóriájuk van, megpróbálhatják közvetlenül megadni a méretet.

Például a gépünkön futtathattuk a parancsot java -Xms256m -Xmx512M formátumban, és úgy működött, mintha egyébként elvárták volna tőle. Ez korlátozza a halom méretét, amelyet a Java virtuális gép indításkor megkísérel fenntartani. Mivel egy korlátlan virtuális gép hipotetikusan szokatlan dolgokat képes végrehajtani, hibaüzeneteket dobhat egy egyébként szabad rendszerre. Érdemes eljátszani ezt a két értéket, mielőtt megtalálja a megfelelő kombinációt.



Ez problémát jelenthet, függetlenül attól, hogy mire futtatja, mivel a JVM-nek semmi köze a GNU / Linux futtatásához használt virtuális gép típusához.

2. módszer: A változók exportálása a változás állandóvá tételéhez

Ha talál egy működő értéket, exportálhatja, hogy állandóvá váljon az adott munkamenethez. Például az _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ exportot használtuk a bash parancssorból, és ez lehetővé tette számunkra, hogy a java parancsot minden más lehetőség nélkül futtassuk, amíg ki nem jelentkezünk a szerverünkről.

Újra futtatni kellett, amikor bejelentkeztünk egy másik munkamenetbe, ezért érdemes hozzáadni minden releváns indító szkripthez, ha azt tervezi, hogy a java parancsot gyakran használja. Hozzáadtuk a sort a .bash_login fájlunkhoz, és úgy tűnt, hogy ez minden egyes alkalommal működik, amikor egy bejelentkezési kérdést használtunk anélkül, hogy újra kellett volna futtatnunk, bár előfordulhat, hogy más helyet kell keresnie a számára, ha más héjjal dolgozik.

Lehet, hogy észrevette, hogy csak bizonyos hardverkonfigurációk váltják ki ezt a hibaüzenetet. Ez azért van, mert ez általában olyan gépeken történik, amelyek nagy fizikai RAM-mal rendelkeznek, de alacsonyabb értékekkel rendelkeznek a használatához. A Java megpróbál kiosztani egy hatalmas blokkot, hogy csak azt mondják neki, hogy nem tudja, amit úgy értelmez, hogy kifogy a memória.

3. módszer: Az aktuális Java-opciók nyomtatása

Ha a parancssornál dolgozott, és szeretne gyors tájékoztatást kapni arról, hogy mire állította be jelenleg a _JAVA_OPTIONS értéket, akkor egyszerűen futtassa az echo $ _JAVA_OPTIONS fájlt, és azonnal kinyomtatja az aktuális értékeket. Ez hasznos a hibaelhárításhoz, amikor megpróbálja kitalálni a megfelelő számokat.

Ne feledje, hogy bár ez a javítás nem igényel semmilyen más játékot, a Java kidobja a „nem tudtam elegendő helyet fenntartani az objektum halomra” üzenetet, ha valaha is a virtuális memória rövid végén találja magát. Ha ez a helyzet, akkor még egyszer ellenőriznie kell a folyamatban lévő folyamatokat, és lehetőség szerint indítsa újra a szervert, ha erre lehetőség van. Létrehozhat több csere helyet is, de ha ez egy kérdés, akkor jobb, ha más módon megpróbálja kijavítani.

Ritka esetben, ha úgy tűnik, hogy a beállítások megfelelőek, de még mindig nem működnek, ellenőrizze, hogy telepítette-e a 64 bites Java csomagot, mivel immunisnak kell lennie ezzel a problémával szemben. Az egybefüggő memóriaigények csak a Java 32 bites verziójára vonatkoznak. Néhány esetben azt találtuk, hogy a 64 bites verzió megpróbált létrehozni egy 32 bites virtuális gépet, így a parancssorban a -d64 opció megadása javította azt számunkra.

3 perc olvasás