Oprava: Počas inicializácie VM došlo k chybe, ktorá nemohla vyhradiť dostatok priestoru pre haldu objektov

Aj keď applety Java nie sú v dnešnej dobe populárnou webovou technológiou, existuje nespočetné množstvo dôvodov na nasadenie virtuálneho stroja Java priamo na server Linux. Ak sa pokúsite spustiť príkaz Linux java priamo na diskrétnom hardvéri alebo vo vnútri vlastného VM, môže sa zobraziť správa „chyba počas inicializácie VM nemohla vyhradiť dostatok miesta pre haldu objektov“.

To pravdepodobne vyzerá dosť zvláštne, pretože je viac než pravdepodobné, že máte dostatok pamäte RAM na spustenie príkazu, ale je to z veľkej časti kvôli špecifickému vtípku v spôsobe, akým sú stránky fyzickej a virtuálnej pamäte zvyknuté. Zadanie niektorých relatívne veľkých veľkostí by vám malo umožniť úplne obísť túto správu a spustiť príkaz java tak, ako by ste to urobili ktokoľvek iný.

Metóda 1: Používanie možností príkazového riadku

Ak ste sa pokúsili spustiť javu a dostali ste túto správu, pravdepodobne ste už spustili bezplatný príkaz, aby ste sa uistili, že máte dostatok pamäte na spustenie programu.

java a bezplatné príkazy

Všimnite si, že na našom testovacom stroji sme mali asi 2,3 GB fyzickej pamäte RAM a zatiaľ si nezvykla ani jedna stránka virtuálnej pamäte. Ak si všimnete, že máte poruchu pamäte, mali by ste predtým, ako to skúsite znova, zavrieť ďalšie spustené veci. Na druhej strane, tí, ktorí zistili, že majú dostatok voľnej pamäte, sa môžu pokúsiť určiť veľkosť priamo.

Napríklad na našom stroji sme mohli spustiť príkaz ako java -Xms256m -Xmx512M a fungoval to, ako by sa inak čakalo. Toto obmedzuje veľkosť haldy, ktorú sa virtuálny stroj Java pokúša rezervovať pri štarte. Pretože neobmedzený virtuálny stroj mohol hypoteticky robiť neobvyklé veci, mohol by na inak slobodný systém hádzať chybové správy. Možno budete tiež chcieť pohrať sa s týmito dvoma hodnotami, kým nájdete tú správnu kombináciu.

To môže byť problém bez ohľadu na to, na čom ho prevádzkujete, pretože JVM nemá nič spoločné s typom VM, ktorý možno používate na spustenie GNU / Linux.

Metóda 2: Export premenných, aby bola zmena trvalá

Keď nájdete hodnotu, ktorá funguje, môžete ju exportovať, aby bola pre danú reláciu trvalá. Napríklad sme použili export _JAVA_OPTIONS = '- Xms256M -Xmx512M' z príkazového riadku bash a ten nám umožnil spustiť príkaz java sám bez ďalších možností, kým sa neodhlásime z nášho servera.

Keď sme sa prihlásili do inej relácie, bolo potrebné ju znovu spustiť, takže ju môžete pridať do všetkých relevantných spúšťacích skriptov, ak plánujete používať príkaz java pomerne často. Riadok sme pridali do nášho súboru .bash_login a zdalo sa, že funguje zakaždým, keď sme použili výzvu na prihlásenie bez toho, aby sme ju museli znova spustiť. Ak však pracujete s iným shellom, možno budete musieť nájsť iné umiestnenie.

Možno ste si všimli, že toto chybové hlásenie spúšťa iba určité hardvérové ​​konfigurácie. Je to tak preto, lebo sa to zvyčajne deje na strojoch s veľkým množstvom fyzickej pamäte RAM, ale s nižšími limitmi, ako ju používať. Java sa pokúsi prideliť obrovský blok, len aby mu bolo povedané, že nemôže, čo interpretuje ako nedostatok pamäte.

Metóda 3: Tlač aktuálnych volieb jazyka Java

Ak pracujete na príkazovom riadku a chcete získať rýchly prehľad toho, na čo ste aktuálne nastavili hodnotu _JAVA_OPTIONS, jednoducho spustite echo $ _JAVA_OPTIONS a okamžite vytlačí aktuálne hodnoty. To je užitočné pri riešení problémov, keď sa snažíte zistiť správne číslice, ktoré chcete vyskúšať.

Majte na pamäti, že aj keď by táto oprava nemala vyžadovať žiadne ďalšie hranie, Java vyhodí správu „nemohol som vyhradiť dostatok miesta pre haldu objektov“, ak sa niekedy skutočne ocitneš na krátkom konci virtuálnej pamäte. Ak je to váš prípad, budete musieť skontrolovať, ktoré procesy práve bežia, a prípadne reštartovať server, ak je to možné. Môžete tiež vytvoriť viac odkladacieho priestoru, ale ak je to problém, je všeobecne lepšie pokúsiť sa ho opraviť iným spôsobom.

V zriedkavých prípadoch, keď sa zdá, že vaše nastavenia sú správne, ale stále nefungujú, nezabudnite nainštalovať 64-bitový balík Java, pretože by mal byť voči tomuto problému odolný. Požiadavky na súvislú pamäť sa vzťahujú iba na 32-bitovú verziu Java. V niekoľkých prípadoch sme zistili, že 64-bitová verzia sa pokúsila vytvoriť 32-bitový virtuálny stroj, takže zadanie možnosti -d64 na príkazovom riadku to za nás opravilo.

Odporúčaná

Oprava: Minecraft neodpovedá
Čo je aplikácia na registráciu zariadenia digitálneho televízneho prijímača a mala by byť odstránená?
Čo je FileRepMalware a mali by ste ho odstrániť