Solució: s'ha produït un error durant la inicialització de la màquina virtual no s'ha pogut reservar prou espai per a l'emmagatzematge d'objectes



Proveu El Nostre Instrument Per Eliminar Problemes

Tot i que els applets Java no són una tecnologia web popular en aquests dies, hi ha innombrables raons per desplegar una màquina virtual Java directament en un servidor Linux. Si intenteu executar directament l'ordre Java de Linux en maquinari discret o dins de la seva pròpia màquina virtual, és possible que obtingueu el missatge 'S'ha produït un error durant la inicialització de la màquina virtual. No es pot reservar prou espai per a la pila d'objectes'.



Probablement sembli estrany perquè és probable que tingueu prou memòria RAM per executar l’ordre, però es deu en gran mesura a una peculiaritat específica en la manera com s’utilitzen les pàgines de memòria física i virtual. Especificar algunes mides relativament grans us hauria de permetre obviar completament aquest missatge i executar l'ordre java de la mateixa manera que ho faríeu amb qualsevol altre.



Mètode 1: utilitzar les opcions de la línia d'ordres

Si heu provat d'executar Java i heu rebut aquest missatge, probablement ja hàgiu executat l'ordre gratuïta per assegurar-vos que hi hagi suficient quantitat de memòria per executar el programa.



comandes java i gratuïtes

Fixeu-vos que a la nostra màquina de prova teníem uns 2,3 GB de RAM física i encara no s’havia utilitzat cap pàgina de memòria virtual. Si observeu que teniu problemes de memòria, voldreu tancar altres coses que hàgiu executat abans de tornar-ho a provar. D’altra banda, aquells que han trobat que tenen molta memòria lliure poden intentar especificar una mida directament.

Per exemple, a la nostra màquina hem pogut executar l'ordre java -Xms256m -Xmx512M i ha funcionat com s'hauria esperat d'una altra manera. Això limita la mida de l'emmagatzematge dinàmic que la màquina virtual Java intenta reservar en iniciar. Atès que una màquina virtual sense restriccions podria hipotèticament fer coses inusuals, podria llançar missatges d'error a un sistema lliure d'una altra manera. És possible que també vulgueu jugar amb aquests dos valors abans de trobar la combinació adequada.



Això pot ser un problema independentment de què el feu servir, ja que la JVM no té res a veure amb el tipus de màquina virtual que podríeu utilitzar per executar GNU / Linux.

Mètode 2: exportació de les variables per fer que el canvi sigui permanent

Quan trobeu un valor que funcioni, podeu exportar-lo perquè sigui permanent per a aquesta sessió. Per exemple, hem utilitzat export _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ des del símbol del sistema bash i ens ha permès executar l’ordre java per si mateixa sense cap altra opció fins que no hem tancat la sessió del nostre servidor.

Calia tornar-lo a executar quan vam iniciar la sessió en una altra sessió, de manera que és possible que vulgueu afegir-lo a qualsevol script d’inici rellevant si teniu previst utilitzar l’ordre Java amb força freqüència. Vam afegir la línia al nostre fitxer .bash_login i semblava que funcionava cada vegada que utilitzàvem una sol·licitud d’inici de sessió sense haver de tornar-la a executar, tot i que és possible que hagueu de trobar una altra ubicació si esteu treballant amb un intèrpret d’ordres diferent.

És possible que hàgiu notat que només algunes configuracions de maquinari activen aquest missatge d'error. Això es deu al fet que sol passar a les màquines amb una gran quantitat de memòria RAM però amb un límit inferior de com utilitzar-lo. Java intentarà assignar un bloc enorme només per dir-li que no pot, cosa que interpreta que s’està quedant sense memòria.

Mètode 3: Impressió d'opcions Java actuals

Si heu estat treballant a la línia d’ordres i voleu fer una referència ràpida al que heu establert actualment al valor _JAVA_OPTIONS, simplement executeu echo $ _JAVA_OPTIONS i imprimirà immediatament els valors actuals. Això és útil per resoldre problemes quan intenteu esbrinar els números adequats.

Tingueu en compte que, tot i que aquesta solució no requereix cap altra reproducció, Java llançarà el missatge 'No es pot reservar prou espai per a l'emmagatzematge d'objectes' si alguna vegada us trobeu realment al final curt de la memòria virtual. Si és el cas, voldreu comprovar de nou quins processos s’executen actualment i, possiblement, reiniciar el servidor si és una opció. També podeu crear més espai d’intercanvi, però si es tracta d’un problema, en general és millor provar de corregir-ho d’una altra manera.

En el rar cas que la vostra configuració sembli correcta, però encara no funciona, assegureu-vos que heu instal·lat el paquet Java de 64 bits, ja que hauria d’ésser immune a aquest problema. Els requisits de memòria contigus només s'apliquen a la versió de Java de 32 bits. Hem trobat en un grapat de casos que la versió de 64 bits va intentar crear una màquina virtual de 32 bits, de manera que especificar l’opció -d64 a la línia d’ordres ens la va solucionar.

3 minuts de lectura