PARANDUS: VM-i initsialiseerimisel ilmnenud viga ei suutnud objekti kuhja jaoks piisavalt ruumi reserveerida

Kuigi Java appletid pole tänapäeval populaarne veebitehnoloogia, on Java virtuaalse masina otse Linuxi serverisse juurutamiseks lugematu arv põhjuseid. Kui proovite käitada Linuxi Java-käsku otse kas eraldi riistvaral või oma VM-is, võite saada sõnumi "VM-i initsialiseerimise käigus ilmnenud tõrge ei suutnud reserveerida piisavalt ruumi objektikuhja jaoks".

See tundub ilmselt üsna kummaline, kuna teil on käsu käivitamiseks enam kui tõenäoliselt piisavalt RAM-i, kuid see on suuresti tingitud konkreetsest veidrusest, kuidas füüsilise ja virtuaalse mälu lehed harjuvad. Mõne suhteliselt suure suuruse määramine peaks võimaldama teil sellest sõnumist täielikult mööda minna ja käivitada java käsu nii, nagu teete seda teist.

1. meetod: käsurea suvandite kasutamine

Kui olete proovinud java käivitada ja selle sõnumi saanud, siis olete ilmselt juba käskinud tasuta käsu veendumaks, et programmi käivitamiseks on piisavalt mälu.

java ja tasuta käsud

Pange tähele, et meie testimasinas oli meil umbes 2,3 GB füüsilist RAM-i ja mitte ükski leht virtuaalset mälu polnud veel harjunud. Kui märkate, et teil on mäluhädasid, peate enne uuesti proovimist sulgema muud jooksvad asjad. Teisalt võivad need, kes leidsid, et neil on piisavalt vaba mälu, proovida suurust otseselt määrata.

Näiteks suutsime oma masinas käsu käivitada kui java -Xms256m -Xmx512M ja see töötas nii, nagu oleks seda muidu oodatud. See piirab kuhja suurust, mida Java virtuaalne masin käivitamisel reserveerida üritab. Kuna ohjeldamatu virtuaalmasin võib hüpoteetiliselt teha ebatavalisi asju, võib see visata muidu tasuta süsteemile veateateid. Enne õige kombinatsiooni leidmist võiksite ka nende kahe väärtusega läbi mängida.

See võib olla probleem olenemata sellest, mida te seda kasutate, kuna JVM-il pole midagi pistmist VM-i tüübiga, mida võite kasutada GNU / Linuxi käitamiseks.

2. meetod: muutujate eksportimine muutuse püsivaks muutmiseks

Kui leiate väärtuse, mis töötab, saate selle eksportida, et muuta see selle seansi jaoks püsivaks. Näiteks kasutasime bashi käsuviibalt eksporti _JAVA_OPTIONS = '- Xms256M -Xmx512M' ja see võimaldas meil ise java käitada ilma muude võimalusteta, kuni logisime oma serverist välja.

See tuli uuesti käivitada, kui logisime sisse mõnda teise seanssi, nii et kui soovite plaanida java käsku üsna sageli kasutada, võiksite selle lisada asjakohastele käivitusskriptidele. Lisasime rea oma .bash_login-faili ja tundus, et see töötab iga kord, kui kasutasime sisselogimisviiba, ilma et peaksime seda uuesti käivitama, ehkki peate töötama mõne muu kestaga selle jaoks muu asukoha.

Võib-olla olete märganud, et ainult teatud riistvarakonfiguratsioonid käivitavad selle tõrketeate. Selle põhjuseks on see, et see juhtub tavaliselt masinates, kus on palju füüsilist RAM-i, kuid selle kasutamise kohta on madalamad arvud. Java üritab eraldada tohutu ploki ainult siis, kui talle öeldakse, et ta ei saa seda, mida ta tõlgendab kui mälu otsa.

3. meetod: praeguste Java-suvandite printimine

Kui olete töötanud käsureal ja soovite kiiret viidet sellele, mille olete väärtuseks _JAVA_OPTIONS määranud, käivitage lihtsalt echo $ _JAVA_OPTIONS ja see prindib kohe praegused väärtused. See on kasulik tõrkeotsingu jaoks, kui proovite välja selgitada õiged numbrid, mida proovida.

Pidage meeles, et kuigi see parandus ei tohiks nõuda muud mängimist, viskab Java välja teate "ei saanud objekti kuhja jaoks piisavalt ruumi varuda", kui leiate end kunagi virtuaalse mälu lühikesest otsast. Kui see on nii, siis peate uuesti kontrollima, millised protsessid praegu käivad, ja võimaluse korral taaskäivitage server, kui see on võimalus. Võite luua ka rohkem vahetamisruumi, kuid kui see on probleem, on parem proovida seda mõnel muul viisil parandada.

Harvadel juhtudel, kui teie seaded näivad olevat õiged, kuid see ei tööta ikkagi, veenduge, et olete installinud 64-bitise Java-paketi, kuna see peaks selle probleemi suhtes immuunne olema. Külgnevad mälunõuded kehtivad ainult Java 32-bitise versiooni kohta. Leidsime vähestel juhtudel, et 64-bitine versioon proovis luua 32-bitist virtuaalset masinat, nii et käsureal oleva suvandi -d64 täpsustamine parandas selle meie jaoks.