Korjaus: Virhe virtuaalikoneen alustuksen aikana ei voinut varata tarpeeksi tilaa objektin kasalle

Vaikka Java-sovelmat eivät ole nykyään suosittu verkkotekniikka, Java-virtuaalikoneen asentamiseen suoraan Linux-palvelimeen on lukemattomia syitä. Jos yrität suorittaa Linuxin java-komennon suoraan joko erillisellä laitteistolla tai oman virtuaalikoneen sisällä, saatat saada "Virhe virtuaalikoneen alustamisen aikana tapahtui virhe ei voinut varata tarpeeksi tilaa objektin kasalle" -sanomalle.

Tämä näyttää todennäköisesti melko oudolta, koska sinulla on todennäköisesti riittävästi RAM-muistia komennon suorittamiseen, mutta se johtuu suurelta osin erityisestä oudosta tavasta, jolla fyysiset ja virtuaaliset muistisivut tottuvat. Eräiden suhteellisen suurien kokojen määrittämisen pitäisi antaa sinun ohittaa tämä viesti kokonaan ja suorittaa java-komento samalla tavalla kuin mitä tahansa muuta.

Tapa 1: Komentorivivalintojen käyttäminen

Jos olet yrittänyt ajaa Java-ohjelmaa ja saanut tämän viestin, olet todennäköisesti jo suorittanut ilmaisen komennon varmistaaksesi, että ohjelman suorittamiseen on riittävästi muistia.

java ja ilmaiset komennot

Huomaa, että testikoneellamme oli noin 2,3 Gt fyysistä RAM-muistia eikä yhtään virtuaalimuistisivua ollut vielä käytetty. Jos huomaat, että sinulla on muistin häiriö, sinun kannattaa sulkea muut käynnissä olevat asiat ennen kuin yrität sitä uudelleen. Toisaalta ne, jotka huomasivat, että heillä on paljon vapaata muistia, voivat yrittää määrittää koon suoraan.

Esimerkiksi koneellamme pystyimme suorittamaan komennon nimellä java -Xms256m -Xmx512M ja se toimi kuten muuten olisi odotettu. Tämä rajoittaa kasan kokoa, jonka Java-virtuaalikone yrittää varata käynnistyksen yhteydessä. Koska rajoittamaton virtuaalikone voisi hypoteettisesti tehdä epätavallisia asioita, se saattaa heittää virheilmoituksia muuten vapaalle järjestelmälle. Voit myös pelata näiden kahden arvon kanssa, ennen kuin löydät oikean yhdistelmän.

Tämä voi olla ongelma riippumatta siitä, mitä käytät sitä, koska JVM: llä ei ole mitään tekemistä sen kanssa, minkä tyyppistä virtuaalikoneita saatat käyttää GNU / Linuxin suorittamiseen.

Tapa 2: Muuttujien vieminen muutoksen muuttamiseksi pysyväksi

Kun löydät toimivan arvon, voit viedä sen pysyväksi kyseiselle istunnolle. Esimerkiksi käytimme vientiä _JAVA_OPTIONS = '- Xms256M -Xmx512M' bash-komentokehotteesta ja se antoi meille mahdollisuuden suorittaa java-komento itse ilman muita vaihtoehtoja, kunnes kirjauduimme ulos palvelimeltamme.

Se oli suoritettava uudelleen, kun kirjauduimme sisään toiseen istuntoon, joten sinun kannattaa lisätä se mihin tahansa asiaankuuluvaan käynnistyskomentosarjaan, jos aiot käyttää java-komentoa melko usein. Lisäsimme rivin .bash_login-tiedostoon ja se näytti toimivan joka kerta, kun käytimme kirjautumiskehotetta joutumatta suorittamaan sitä uudelleen, vaikka sinun on ehkä löydettävä sille toinen sijainti, jos työskentelet eri kuoren kanssa.

Olet ehkä huomannut, että vain tietyt laitteistokokoonpanot käynnistävät tämän virhesanoman. Tämä johtuu siitä, että se tapahtuu yleensä koneissa, joissa on paljon fyysistä RAM-muistia, mutta alhaisemmat ulimitit sen käyttämiseksi. Java yrittää kohdistaa valtavan lohkon vain sanomaan, että se ei voi, jonka se tulkitsee muistin loppuvan.

Tapa 3: Nykyisten Java-asetusten tulostaminen

Jos olet työskennellyt komentorivillä ja haluat nopean viitteen siihen, mihin olet asettanut _JAVA_OPTIONS-arvon, suorita yksinkertaisesti echo $ _JAVA_OPTIONS ja se tulostaa heti nykyiset arvot. Tämä on hyödyllinen vianmäärityksessä, kun yrität selvittää oikeat numerot, joita kokeilla.

Muista, että vaikka tämän korjauksen ei pitäisi vaatia mitään muuta pelaamista, Java heittää pois "ei voitu varata tarpeeksi tilaa esineiden kasalle" -viestin, jos huomaat koskaan aidosti virtuaalimuistin lyhyessä päässä. Jos näin on, sinun on tarkistettava uudelleen käynnissä olevat prosessit ja käynnistettävä palvelin uudelleen, jos se on vaihtoehto. Voit myös luoda enemmän vaihtotilaa, mutta jos tämä on ongelma, on yleensä parempi yrittää korjata se jollakin muulla tavalla.

Harvinaisissa tapauksissa, joissa asetukset näyttävät olevan oikeita, mutta se ei silti toimi, varmista, että olet asentanut 64-bittisen Java-paketin, koska sen pitäisi olla immuuni tälle ongelmalle. Yhtenäiset muistivaatimukset koskevat vain 32-bittistä Java-versiota. Löysimme muutamissa tapauksissa 64-bittinen versio yritti luoda 32-bittisen virtuaalikoneen, joten -d64 -vaihtoehdon määrittäminen komentorivillä korjasi sen meille.