Fix: Der opstod en fejl under initialisering af VM kunne ikke reservere nok plads til objektbunke

Selvom Java-applets ikke er en populær webteknologi i disse dage, er der utallige grunde til at installere en Java-virtuel maskine direkte på en Linux-server. Hvis du forsøger at køre Linux java-kommandoen direkte på enten diskret hardware eller inde i sin egen VM, får du muligvis en meddelelse om, at "fejl opstod under initialisering af VM ikke kunne reservere plads nok til objektbunke".

Dette ser sandsynligvis ret mærkeligt ud, fordi du mere end sandsynligt har nok RAM til at køre kommandoen, men det skyldes i vid udstrækning en bestemt quirk på den måde, at fysiske og virtuelle hukommelsessider bliver brugt. Hvis du angiver nogle relativt store størrelser, skal du fuldstændig omgå denne besked og køre java-kommandoen som du ville gjort med andre.

Metode 1: Brug af kommandolinjevalg

Hvis du har forsøgt at køre java og fået denne besked, har du sandsynligvis allerede kørt den gratis kommando for at sikre dig, at der er rigeligt med hukommelse til at køre programmet i.

java & gratis kommandoer

Bemærk, at vi på vores testmaskine havde nogle 2,3 GB fysisk RAM og ikke en eneste side virtuel hukommelse var blevet brugt endnu. Hvis du bemærker, at du har en hukommelsesknap, vil du gerne lukke andre ting, du kører, før du prøver det igen. På den anden side kan de, der fandt ud af, at de har masser af ledig hukommelse, prøve at angive en størrelse direkte.

For eksempel kunne vi på vores maskine køre kommandoen som java -Xms256m -Xmx512M, og det fungerede som om det ellers ville have været forventet. Dette begrænser den bunkestørrelse, som den virtuelle Java-maskine forsøger at reservere ved opstart. Da en uhæmmet virtuel maskine hypotetisk kunne gøre usædvanlige ting, kan den muligvis kaste fejlmeddelelser på et ellers gratis system. Det kan også være en god idé at lege med disse to værdier, før du finder den rigtige kombination.

Dette kan være et problem uanset hvad du kører det på, da JVM ikke har noget at gøre med den type VM, du muligvis bruger til at køre GNU / Linux.

Metode 2: Eksport af variablerne for at gøre ændringen permanent

Når du finder en værdi, der fungerer, kan du eksportere den for at gøre den permanent til den session. For eksempel brugte vi eksport _JAVA_OPTIONS = '- Xms256M -Xmx512M' fra bash-kommandoprompten, og det tillod os at køre java-kommandoen i sig selv uden andre muligheder, indtil vi loggede ud af vores server.

Det skulle køres igen, når vi loggede på en anden session, så du vil muligvis føje det til relevante opstartsskripter, hvis du planlægger at bruge java-kommandoen ret ofte. Vi tilføjede linjen til vores .bash_login-fil, og det så ud til at fungere, hver gang vi brugte en loginprompt uden at skulle køre den igen, selvom du muligvis bliver nødt til at finde en anden placering til den, hvis du arbejder med en anden skal.

Du har muligvis bemærket, at kun visse hardwarekonfigurationer udløser denne fejlmeddelelse. Det skyldes, at det normalt sker på maskiner med meget fysisk RAM, men lavere ulimits for, hvordan man bruger det. Java vil forsøge at tildele en enorm blok kun for at få at vide, at den ikke kan, hvilket den fortolker som at løbe tør for hukommelse.

Metode 3: Udskrivning af aktuelle Java-indstillinger

Hvis du har arbejdet på kommandolinjen og vil have en hurtig henvisning til, hvad du i øjeblikket har indstillet _JAVA_OPTIONS-værdien til, skal du blot køre ekko $ _JAVA_OPTIONS, og den udskriver straks de aktuelle værdier. Dette er nyttigt til fejlfinding, når du prøver at finde ud af de rigtige tal, du kan prøve.

Husk, at selvom denne løsning ikke skal kræve nogen anden afspilning, vil Java smide meddelelsen "kunne ikke reservere plads nok til objektbunke", hvis du nogensinde finder dig virkelig i den korte ende af virtuel hukommelse. Hvis dette er tilfældet, skal du dobbelttjekke hvilke processer der aktuelt kører og muligvis genstarte serveren, hvis det er en mulighed. Du kan også oprette mere swap-plads, men hvis dette er et problem, er det generelt bedre at prøve at rette det på en anden måde.

I sjældne tilfælde at dine indstillinger ser ud til at være rigtige, men det stadig ikke fungerer, skal du sørge for at have installeret 64-bit Java-pakken, da den skal være immun over for dette problem. Sammenhængende hukommelseskrav gælder kun for 32-bit version af Java. Vi fandt i en håndfuld tilfælde, at 64-bit-versionen forsøgte at oprette en 32-bit virtuel maskine, så angivelse af -d64-indstillingen på kommandolinjen fik det til os.

Anbefalet

Fix: Minecraft svarer ikke
Hvad er applikation til registrering af digital tv-tuner-enhed, og skal den fjernes?
Hvad er FileRepMalware, og skal du fjerne det