Correzione: si è verificato un errore durante l'inizializzazione della VM che non poteva riservare spazio sufficiente per l'heap degli oggetti

Anche se le applet Java non sono una tecnologia web popolare oggigiorno, ci sono innumerevoli ragioni per distribuire una macchina virtuale Java direttamente su un server Linux. Se si tenta di eseguire il comando java di Linux direttamente su hardware discreto o all'interno della propria VM, è possibile che venga visualizzato il messaggio "Errore durante l'inizializzazione della VM che non ha potuto riservare spazio sufficiente per l'heap degli oggetti".

Questo probabilmente sembra piuttosto strano perché molto probabilmente hai abbastanza RAM per eseguire il comando, ma è in gran parte dovuto a una stranezza specifica nel modo in cui vengono utilizzate le pagine di memoria fisica e virtuale. La specifica di alcune dimensioni relativamente grandi dovrebbe consentirti di ignorare completamente questo messaggio ed eseguire il comando java come faresti con qualsiasi altro.

Metodo 1: utilizzo delle opzioni della riga di comando

Se hai provato a eseguire java e hai ricevuto questo messaggio, probabilmente hai già eseguito il comando gratuito per assicurarti che ci siano ampie scorte di memoria per eseguire il programma.

java e comandi gratuiti

Si noti che sulla nostra macchina di prova avevamo circa 2,3 GB di RAM fisica e non era stata ancora utilizzata una singola pagina di memoria virtuale. Se noti che hai una crisi di memoria, allora ti consigliamo di chiudere altre cose che hai in esecuzione prima di riprovare. D'altra parte, coloro che hanno scoperto di avere molta memoria libera possono provare a specificare direttamente una dimensione.

Ad esempio, sulla nostra macchina siamo stati in grado di eseguire il comando come java -Xms256m -Xmx512M e ha funzionato come sarebbe stato altrimenti previsto. Ciò limita la dimensione dell'heap che la Java virtual machine tenta di riservare all'avvio. Poiché una macchina virtuale senza limiti potrebbe ipoteticamente fare cose insolite, potrebbe generare messaggi di errore su un sistema altrimenti libero. Potresti anche voler giocare con questi due valori prima di trovare la giusta combinazione.

Questo può essere un problema indipendentemente da cosa lo stai eseguendo poiché la JVM non ha nulla a che fare con il tipo di VM che potresti utilizzare per eseguire GNU / Linux.

Metodo 2: esportazione delle variabili per rendere permanente la modifica

Quando trovi un valore che funziona, puoi esportarlo per renderlo permanente per quella sessione. Ad esempio, abbiamo utilizzato export _JAVA_OPTIONS = '- Xms256M -Xmx512M' dal prompt dei comandi bash e ci ha permesso di eseguire il comando java da solo senza altre opzioni fino a quando non siamo usciti dal nostro server.

Doveva essere eseguito di nuovo quando abbiamo effettuato l'accesso a un'altra sessione, quindi potresti aggiungerlo a qualsiasi script di avvio pertinente se prevedi di utilizzare il comando java abbastanza spesso. Abbiamo aggiunto la riga al nostro file .bash_login e sembrava funzionare ogni volta che abbiamo utilizzato un prompt di accesso senza doverlo eseguire di nuovo, anche se potresti dover trovare un'altra posizione se stai lavorando con una shell diversa.

Avrai notato che solo alcune configurazioni hardware attivano questo messaggio di errore. Questo perché di solito accade su macchine con una grande quantità di RAM fisica ma limiti inferiori per come usarla. Java proverà ad allocare un blocco enorme solo per sentirsi dire che non può, cosa che interpreta come l'esaurimento della memoria.

Metodo 3: stampa delle opzioni Java correnti

Se hai lavorato dalla riga di comando e desideri un riferimento rapido a ciò su cui hai attualmente impostato il valore _JAVA_OPTIONS, esegui semplicemente echo $ _JAVA_OPTIONS e stamperà immediatamente i valori correnti. Questo è utile per la risoluzione dei problemi quando stai cercando di capire i numeri giusti da provare.

Tieni presente che mentre questa correzione non dovrebbe richiedere nessun altro gioco, Java lancerà il messaggio "non è stato possibile riservare spazio sufficiente per l'heap di oggetti" se ti trovi mai veramente nella parte breve della memoria virtuale. In questo caso, ti consigliamo di ricontrollare quali processi sono attualmente in esecuzione ed eventualmente riavviare il server se questa è un'opzione. Puoi anche creare più spazio di swap, ma se questo è un problema è generalmente meglio provare a correggerlo in qualche altro modo.

Nel raro caso in cui le tue impostazioni sembrino corrette ma ancora non funzionino, assicurati di aver installato il pacchetto Java a 64 bit poiché dovrebbe essere immune a questo problema. I requisiti di memoria contigui si applicano solo alla versione a 32 bit di Java. Abbiamo riscontrato che in una manciata di casi la versione a 64 bit ha provato a creare una macchina virtuale a 32 bit, quindi specificare l'opzione -d64 sulla riga di comando l'ha risolto per noi.

Raccomandato

Correzione: Minecraft non rispondeva
Che cos'è l'applicazione di registrazione del dispositivo del sintonizzatore TV digitale e deve essere rimossa?
Cos'è FileRepMalware e dovresti rimuoverlo