Popravak: Došlo je do pogreške tijekom inicijalizacije VM-a, nije mogao rezervirati dovoljno prostora za hrpu objekata



Isprobajte Naš Instrument Za Uklanjanje Problema

Iako Java apleti danas nisu popularna web tehnologija, postoji bezbroj razloga za postavljanje Java virtualnog stroja izravno na Linux poslužitelj. Ako pokušate izravno pokrenuti Linux java naredbu ili na diskretnom hardveru ili unutar vlastitog VM-a, možda ćete dobiti poruku 'dogodila se pogreška tijekom inicijalizacije VM-a, nije mogao rezervirati dovoljno prostora za hrpu objekata'.



To vjerojatno izgleda prilično čudno jer više nego vjerojatno imate dovoljno RAM-a za pokretanje naredbe, ali to je velikim dijelom zbog specifične hirovitosti u načinu na koji se stranice fizičke i virtualne memorije koriste. Određivanje nekih relativno velikih veličina trebalo bi vam omogućiti da u potpunosti zaobiđete ovu poruku i pokrenete java naredbu onako kako biste to učinili.



Metoda 1: Korištenje opcija naredbenog retka

Ako ste pokušali pokrenuti javu i dobili ovu poruku, vjerojatno ste već pokrenuli besplatnu naredbu kako biste bili sigurni da postoji dovoljno memorije za pokretanje programa.



java i besplatne naredbe

Primijetite da smo na našem testnom stroju imali oko 2,3 GB fizičkog RAM-a i još se nije iskoristila niti jedna stranica virtualne memorije. Ako primijetite da imate poteškoće u memoriji, tada ćete htjeti zatvoriti druge stvari koje ste pokrenuli prije ponovnog pokušaja. S druge strane, oni koji su ustanovili da imaju dovoljno slobodne memorije mogu pokušati izravno odrediti veličinu.

Na primjer, na našem smo stroju mogli pokrenuti naredbu kao java -Xms256m -Xmx512M i radila je kao što bi se inače očekivalo. To ograničava veličinu hrpe koju Java virtualni stroj pokušava rezervirati pri pokretanju. Budući da neobuzdani virtualni stroj hipotetički može raditi neobične stvari, mogao bi bacati poruke o pogreškama na inače besplatan sustav. Možda ćete se poželjeti poigrati s te dvije vrijednosti prije nego što pronađete pravu kombinaciju.



To može biti problem bez obzira na čemu ga pokrećete, jer JVM nema nikakve veze s vrstom VM-a koji možda koristite za pokretanje GNU / Linuxa.

Metoda 2: Izvoz varijabli kako bi promjena postala trajna

Kad pronađete vrijednost koja djeluje, možete je izvesti da bi postala trajna za tu sesiju. Na primjer, koristili smo izvoz _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ iz naredbenog retka bash i omogućio nam je pokretanje Java naredbe samostalno bez ikakvih drugih opcija dok se nismo odjavili s poslužitelja.

Trebalo ga je ponovno pokrenuti kad smo se prijavili u drugu sesiju, pa biste ga možda trebali dodati svim relevantnim skriptama za pokretanje ako planirate prilično često koristiti naredbu java. Dodali smo redak u našu .bash_login datoteku i činilo se da funkcionira svaki put kada smo upotrijebili upit za prijavu bez da ga moramo ponovno pokretati, iako ćete možda morati pronaći drugo mjesto za njega ako radite s drugom ljuskom.

Možda ste primijetili da samo određene konfiguracije hardvera pokreću ovu poruku o pogrešci. To je zato što se to obično događa na strojevima s velikom količinom fizičkog RAM-a, ali nižim ograničenjima kako ga koristiti. Java će pokušati dodijeliti ogroman blok samo da bi joj se reklo da ne može, što tumači kao ponestajanje memorije.

Metoda 3: Ispis trenutnih Java opcija

Ako radite na naredbenom retku i želite brzu referencu na ono što ste trenutno postavili na vrijednost _JAVA_OPTIONS, jednostavno pokrenite echo $ _JAVA_OPTIONS i on će odmah ispisati trenutne vrijednosti. Ovo je korisno za rješavanje problema kada pokušavate otkriti prave brojeve za isprobavanje.

Imajte na umu da, iako ovaj popravak ne bi trebao zahtijevati bilo kakvo drugo igranje, Java će izbaciti poruku 'ne mogu rezervirati dovoljno prostora za hrpu predmeta' ako se ikad nađete istinski na kratkom kraju virtualne memorije. Ako je to slučaj, morat ćete provjeriti koji se procesi trenutno izvode i možda ponovno pokrenuti poslužitelj ako je to opcija. Možete stvoriti i više prostora za zamjenu, ali ako je to problem, općenito je bolje pokušati ga ispraviti na neki drugi način.

U rijetkim slučajevima kada se čini da su vaše postavke ispravne, ali još uvijek ne rade, provjerite jeste li instalirali 64-bitni Java paket jer bi trebao biti imun na ovaj problem. Neprekidni zahtjevi za memorijom primjenjuju se samo na 32-bitnu verziju Jave. Pronašli smo u nekolicini slučajeva 64-bitnu verziju koja je pokušala stvoriti 32-bitni virtualni stroj, tako da smo je odredili opciju -d64 u naredbenom retku.

3 minute čitanja