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



Proovige Meie Instrumenti Probleemide Kõrvaldamiseks

Kuigi Java appletid pole tänapäeval populaarne veebitehnoloogia, on Java-virtuaalmasina 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 ajal ilmnenud viga ei suutnud objekti kuhja jaoks piisavalt ruumi reserveerida'.



See tundub ilmselt üsna veider, kuna teil on käsu käitamiseks 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, olete tõenäoliselt 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äsku 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 töötavat iga kord, kui kasutasime sisselogimisviiba, ilma et peaksime seda uuesti käivitama, kuigi peate võib-olla leidma selle jaoks mõne muu asukoha, kui töötate teise kestaga.

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 seadnud, 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 sõnumi 'ei suutnud objekti kuhja jaoks piisavalt ruumi varuda', kui leiate end kunagi virtuaalse mälu lühikesest otsast. Sellisel juhul peate uuesti kontrollima, millised protsessid praegu käivad, ja 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 need ei tööta ikkagi, veenduge, et olete installinud 64-bitise Java-paketi, kuna see peaks selle probleemi suhtes olema immuunne. 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.

3 minutit loetud