Remediere: Eroarea apărută în timpul inițializării VM nu a putut rezerva suficient spațiu pentru grămada de obiecte

Chiar dacă applet-urile Java nu sunt o tehnologie web populară în zilele noastre, există nenumărate motive pentru a implementa o mașină virtuală Java direct pe un server Linux. Dacă încercați să executați direct comanda Java Linux fie pe hardware discret, fie în interiorul propriei VM, atunci s-ar putea să primiți un mesaj „eroare apărută în timpul inițializării VM nu ar putea rezerva suficient spațiu pentru heap-ul obiectului”.

Probabil că acest lucru pare destul de ciudat, deoarece probabil că aveți suficientă memorie RAM pentru a rula comanda, dar se datorează în mare măsură unei ciudățenii specifice în modul în care paginile de memorie fizică și virtuală sunt utilizate. Specificarea unor dimensiuni relativ mari ar trebui să vă permită să ocoliți complet acest mesaj și să rulați comanda Java așa cum ați face oricare altul.

Metoda 1: Utilizarea Opțiunilor liniei de comandă

Dacă ați încercat să rulați java și ați primit acest mesaj, atunci probabil că ați rulat deja comanda gratuită pentru a vă asigura că există suficiente cantități de memorie pentru a rula programul.

comenzi Java și gratuite

Observați că pe aparatul nostru de testare aveam aproximativ 2,3 GB de memorie RAM fizică și nici măcar o singură pagină de memorie virtuală nu se obișnuise încă. Dacă observați că aveți o criză de memorie, atunci veți dori să închideți alte lucruri pe care le aveți înainte de a le încerca din nou. Pe de altă parte, cei care au descoperit că dispun de multă memorie liberă pot încerca să specifice direct o dimensiune.

De exemplu, pe mașina noastră am putut rula comanda ca java -Xms256m -Xmx512M și a funcționat așa cum s-ar fi așteptat altfel. Aceasta constrânge dimensiunea heap-ului pe care mașina virtuală Java încearcă să o rezerve la pornire. Deoarece o mașină virtuală neîngrădită ar putea face ipotetic lucruri neobișnuite, ar putea arunca mesaje de eroare pe un sistem altfel gratuit. De asemenea, vă recomandăm să vă jucați cu aceste două valori înainte de a găsi combinația potrivită.

Aceasta poate fi o problemă, indiferent de funcționarea acestuia, deoarece JVM nu are nicio legătură cu tipul de VM pe care l-ați putea folosi pentru a rula GNU / Linux.

Metoda 2: Exportarea variabilelor pentru a face schimbarea permanentă

Când găsiți o valoare care funcționează, o puteți exporta pentru a o face permanentă pentru acea sesiune. De exemplu, am folosit export _JAVA_OPTIONS = '- Xms256M -Xmx512M' din linia de comandă bash și ne-a permis să rulăm comanda java de la sine fără alte opțiuni până când ne-am deconectat de pe serverul nostru.

Trebuia să fie rulat din nou când ne-am conectat la o altă sesiune, deci poate doriți să îl adăugați la orice scripturi relevante de pornire dacă intenționați să utilizați comanda Java destul de des. Am adăugat linia în fișierul nostru .bash_login și părea să funcționeze de fiecare dată când am folosit o solicitare de conectare fără a fi nevoie să o rulăm din nou, deși este posibil să trebuiască să găsiți o altă locație pentru aceasta dacă lucrați cu un shell diferit.

Este posibil să fi observat că numai anumite configurații hardware declanșează acest mesaj de eroare. Asta pentru că se întâmplă de obicei pe mașini cu o mare cantitate de memorie RAM fizică, dar ulimite mai mici pentru modul de utilizare. Java va încerca să aloce un bloc uriaș doar pentru a-i spune că nu poate, pe care îl interpretează ca fiind lipsit de memorie.

Metoda 3: Tipărirea opțiunilor Java curente

Dacă ați lucrat la linia de comandă și doriți o referință rapidă la ceea ce ați setat în prezent la valoarea _JAVA_OPTIONS, atunci pur și simplu rulați echo $ _JAVA_OPTIONS și va imprima imediat valorile curente. Acest lucru este util pentru depanarea atunci când încercați să aflați numerele potrivite pentru a încerca.

Rețineți că, deși această remediere nu ar trebui să necesite alte jocuri, Java va arunca mesajul „Nu am putut rezerva suficient spațiu pentru grămada de obiecte” dacă vă aflați vreodată cu adevărat pe capătul scurt al memoriei virtuale. Dacă acesta este cazul, atunci veți dori să verificați ce procese rulează în prezent și, eventual, să reporniți serverul dacă aceasta este o opțiune. De asemenea, puteți crea mai mult spațiu de swap, dar dacă aceasta este o problemă, în general este mai bine să încercați să o corectați în alt mod.

În cazul rar în care setările dvs. par a fi corecte, dar încă nu funcționează, asigurați-vă că ați instalat pachetul Java pe 64 de biți, deoarece ar trebui să fie imun la această problemă. Cerințele de memorie contigue se aplică numai versiunii Java pe 32 de biți. Am găsit într-o mână de cazuri că versiunea pe 64 de biți a încercat să creeze o mașină virtuală pe 32 de biți, așa că specificarea opțiunii -d64 pe linia de comandă ne-a remediat-o.