Oplossing: er is een fout opgetreden tijdens de initialisatie van de VM, kon niet genoeg ruimte reserveren voor de objectheap

Hoewel Java-applets tegenwoordig geen populaire webtechnologie zijn, zijn er talloze redenen om een ​​virtuele Java-machine rechtstreeks op een Linux-server te implementeren. Als u de Linux Java-opdracht rechtstreeks op discrete hardware of in de eigen VM probeert uit te voeren, krijgt u mogelijk het bericht "Fout opgetreden tijdens initialisatie van VM kon niet genoeg ruimte reserveren voor objectheap".

Dit ziet er waarschijnlijk nogal vreemd uit omdat je waarschijnlijk genoeg RAM hebt om de opdracht uit te voeren, maar het is grotendeels te wijten aan een specifieke eigenaardigheid in de manier waarop fysieke en virtuele geheugenpagina's worden gebruikt. Als u enkele relatief grote formaten specificeert, zou u dit bericht volledig moeten omzeilen en het java-commando uitvoeren zoals u dat zou doen.

Methode 1: Command Line-opties gebruiken

Als je java hebt geprobeerd uit te voeren en dit bericht hebt gekregen, heb je waarschijnlijk al het free commando uitgevoerd om er zeker van te zijn dat er voldoende geheugen is om het programma in uit te voeren.

java en gratis opdrachten

Merk op dat we op onze testmachine ongeveer 2,3 GB fysiek RAM hadden en dat er nog geen enkele pagina virtueel geheugen was gebruikt. Als u merkt dat u een geheugencrisis heeft, wilt u andere dingen die u aan het uitvoeren bent, sluiten voordat u het opnieuw probeert. Aan de andere kant kunnen degenen die hebben ontdekt dat ze voldoende vrij geheugen hebben, proberen om rechtstreeks een grootte op te geven.

Op onze computer konden we bijvoorbeeld het commando uitvoeren als java -Xms256m -Xmx512M en het werkte zoals het anders zou zijn verwacht. Dit beperkt de heapgrootte die de virtuele Java-machine probeert te reserveren bij het opstarten. Omdat een ongeremde virtuele machine hypothetisch ongebruikelijke dingen zou kunnen doen, kan deze foutmeldingen op een verder vrij systeem genereren. Misschien wil je ook met die twee waarden spelen voordat je de juiste combinatie vindt.

Dit kan een probleem zijn, ongeacht waarop u het uitvoert, aangezien de JVM niets te maken heeft met het type VM dat u mogelijk gebruikt om GNU / Linux uit te voeren.

Methode 2: de variabelen exporteren om de wijziging permanent te maken

Als u een waarde vindt die werkt, kunt u deze exporteren om deze permanent te maken voor die sessie. We gebruikten bijvoorbeeld export _JAVA_OPTIONS = '- Xms256M -Xmx512M' vanaf de bash-opdrachtprompt en het stelde ons in staat om de Java-opdracht zelf uit te voeren zonder andere opties totdat we uitlogden bij onze server.

Het moest opnieuw worden uitgevoerd toen we in een andere sessie inlogden, dus misschien wil je het toevoegen aan relevante opstartscripts als je van plan bent om de Java-opdracht vrij vaak te gebruiken. We hebben de regel aan ons .bash_login-bestand toegevoegd en het leek te werken elke keer dat we een login-prompt gebruikten zonder het opnieuw uit te voeren, hoewel je er misschien een andere locatie voor moet zoeken als je met een andere shell werkt.

Het is je misschien opgevallen dat alleen bepaalde hardwareconfiguraties deze foutmelding activeren. Dat komt omdat het meestal gebeurt op machines met veel fysiek RAM, maar met lagere limieten voor het gebruik ervan. Java zal proberen een enorm blok toe te wijzen om te horen dat het niet kan, wat het interpreteert als een tekort aan geheugen.

Methode 3: huidige Java-opties afdrukken

Als je op de commandoregel hebt gewerkt en een snelle referentie wilt naar waar je momenteel de _JAVA_OPTIONS-waarde op hebt ingesteld, voer dan simpelweg echo $ _JAVA_OPTIONS uit en het zal onmiddellijk de huidige waarden afdrukken. Dit is handig voor het oplossen van problemen wanneer u probeert de juiste cijfers te achterhalen.

Houd er rekening mee dat hoewel deze fix geen ander spel vereist, Java het bericht "kan niet genoeg ruimte voor objectheap reserveren" weggooit als je ooit echt aan de korte kant van het virtuele geheugen komt. Als dit het geval is, moet u controleren welke processen momenteel worden uitgevoerd en eventueel de server opnieuw opstarten als dat een optie is. U kunt ook meer swapruimte creëren, maar als dit een probleem is, is het over het algemeen beter om te proberen het op een andere manier te corrigeren.

In het zeldzame geval dat uw instellingen juist lijken maar het nog steeds niet werkt, moet u ervoor zorgen dat u het 64-bits Java-pakket hebt geïnstalleerd, aangezien het immuun zou moeten zijn voor dit probleem. Aaneengesloten geheugenvereisten zijn alleen van toepassing op de 32-bits versie van Java. We ontdekten dat in een handvol gevallen de 64-bits versie probeerde een 32-bits virtuele machine te maken, dus het specificeren van de -d64-optie op de opdrachtregel loste dit voor ons op.

Aanbevolen

Oplossing: Minecraft reageert niet
Wat is de registratietoepassing voor een digitale tv-tuner en moet deze worden verwijderd?
Wat is FileRepMalware en moet u het verwijderen?