Oplossing: Fout opgetreden tijdens initialisatie van VM kon onvoldoende ruimte voor objectheap reserveren
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 je de Linux java-opdracht regelrecht probeert uit te voeren op discrete hardware of in een eigen VM, kan er een fout optreden tijdens de initialisatie van VM kan er niet genoeg ruimte worden gereserveerd voor een objectheap-bericht.
Dit ziet er waarschijnlijk nogal vreemd uit, omdat je meer dan waarschijnlijk genoeg RAM hebt om het commando uit te voeren, maar dit komt grotendeels door een specifieke gril in de manier waarop fysieke en virtuele geheugenpagina's worden gebruikt. Als u enkele relatief grote formaten opgeeft, moet u dit bericht volledig omzeilen en de opdracht java uitvoeren zoals u dat zou doen.
Methode 1: Opdrachtregelopties gebruiken
Als je hebt geprobeerd Java uit te voeren en dit bericht hebt ontvangen, heb je waarschijnlijk al de gratis opdracht uitgevoerd om te controleren of er voldoende geheugen is voor het programma.
Merk op dat we op onze testmachine ongeveer 2, 3 GB fysieke RAM hadden en dat er nog geen enkele pagina met virtueel geheugen was gebruikt. Als je merkt dat je een geheugencrisis hebt, wil je andere dingen die je hebt, sluiten voordat je het opnieuw probeert. Aan de andere kant kunnen degenen die hebben vastgesteld dat ze over voldoende gratis geheugen beschikken, proberen om direct een grootte op te geven.
Op onze machine waren we bijvoorbeeld in staat om het commando als java -Xms256m -Xmx512M uit te voeren 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 ongewone dingen zou kunnen doen, zou het foutmeldingen kunnen toveren op een overigens vrij systeem. Misschien wilt u ook met deze twee waarden spelen voordat u de juiste combinatie vindt.
Dit kan een probleem zijn ongeacht waar je het mee bezig bent, omdat de JVM niets te maken heeft met het type VM dat je misschien zou gebruiken om GNU / Linux uit te voeren.
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikkenMethode 2: De variabelen exporteren om de wijziging permanent te maken
Wanneer 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' van 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 wanneer we een andere sessie hadden ingelogd, dus u zou het misschien aan elke relevante opstartscripts willen toevoegen als u van plan bent om de opdracht java vrij vaak te gebruiken. We hebben de regel toegevoegd aan ons .bash_login-bestand en het leek te werken elke keer dat we een login-prompt gebruikten zonder het opnieuw te hoeven uitvoeren, hoewel je misschien een andere locatie moet zoeken als je met een andere shell werkt.
U hebt misschien gemerkt dat alleen bepaalde hardwareconfiguraties dit foutbericht activeren. Dat komt omdat het meestal gebeurt op computers met veel fysiek RAM-geheugen, maar lagere ulimits voor het gebruik ervan. Java zal proberen een enorm blok toe te wijzen, alleen 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 opdrachtregel hebt gewerkt en een snelle verwijzing wilt naar wat je momenteel de _JAVA_OPTIONS-waarde hebt ingesteld, voer dan gewoon echo $ _JAVA_OPTIONS uit en het zal de huidige waarden onmiddellijk afdrukken. Dit is handig voor het oplossen van problemen wanneer u probeert de juiste cijfers te vinden om te proberen.
Houd er rekening mee dat hoewel deze fix geen andere spelen vereist, Java zal weggooien en niet genoeg ruimte voor een objectheap-bericht kan reserveren als je ooit echt aan het korte einde van het virtuele geheugen komt. Als dit het geval is, moet u controleren welke processen momenteel actief zijn en eventueel de server opnieuw opstarten als dat een optie is. U kunt ook meer swapruimte maken, maar als dit een probleem is, is het over het algemeen beter om het op een andere manier te proberen te corrigeren.
In het zeldzame geval dat uw instellingen correct lijken, maar het werkt nog steeds niet, moet u ervoor zorgen dat u het 64-bits Java-pakket hebt geïnstalleerd, omdat dit immuun zou moeten zijn voor dit probleem. Aaneengesloten geheugenvereisten zijn alleen van toepassing op de 32-bits versie van Java. We vonden in een handvol gevallen dat de 64-bits versie probeerde een 32-bits virtuele machine te maken, dus specificeerde de optie -d64 op de opdrachtregel deze voor ons.
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken