Oprava: Při inicializaci virtuálního počítače došlo k chybě, která nemohla vyhradit dostatek místa pro haldu objektu

Přestože applety Java dnes nejsou populární webovou technologií, existuje nespočet důvodů, proč nasadit virtuální stroj Java přímo na server Linux. Pokud se pokusíte spustit příkaz Linux java přímo buď na diskrétním hardwaru, nebo uvnitř vlastního virtuálního počítače, může se zobrazit zpráva „došlo k chybě při inicializaci virtuálního počítače a nebylo možné vyhradit dostatek místa pro haldu objektů“.

To pravděpodobně vypadá poněkud divně, protože je více než pravděpodobné, že máte dostatek paměti RAM ke spuštění příkazu, ale je to z velké části kvůli specifickému vtípku ve způsobu, jakým jsou stránky fyzické a virtuální paměti zvyklé. Zadání některých relativně velkých velikostí by vám mělo umožnit úplně obejít tuto zprávu a spustit příkaz java stejným způsobem jako ostatní.

Metoda 1: Použití možností příkazového řádku

Pokud jste se pokusili spustit javu a dostali jste tuto zprávu, pravděpodobně jste již spustili bezplatný příkaz, abyste se ujistili, že máte dostatek paměti pro spuštění programu.

java a bezplatné příkazy

Všimněte si, že na našem testovacím stroji jsme měli zhruba 2,3 GB fyzické paměti RAM a ještě jsme si nevyužili ani jednu stránku virtuální paměti. Pokud si všimnete, že máte poruchu paměti, budete chtít zavřít další spuštěné věci, než to zkusíte znovu. Na druhou stranu, ti, kteří zjistili, že mají dostatek volné paměti, se mohou pokusit zadat velikost přímo.

Například na našem stroji jsme byli schopni spustit příkaz jako java -Xms256m -Xmx512M a fungovalo to, jako by se jinak očekávalo. To omezuje velikost haldy, kterou se virtuální počítač Java pokusí rezervovat při spuštění. Protože neomezený virtuální stroj by mohl hypoteticky dělat neobvyklé věci, mohl by na jinak svobodný systém házet chybové zprávy. Možná si budete chtít s těmito dvěma hodnotami pohrát, než najdete tu správnou kombinaci.

To může být problém bez ohledu na to, na čem běžíte, protože JVM nemá nic společného s typem virtuálního počítače, který používáte ke spuštění GNU / Linux.

Metoda 2: Export proměnných, aby byla změna trvalá

Když najdete hodnotu, která funguje, můžete ji exportovat, aby byla pro danou relaci trvalá. Například jsme použili export _JAVA_OPTIONS = '- Xms256M -Xmx512M' z příkazového řádku bash a umožnil nám spustit java příkaz sám bez dalších možností, dokud se neodhlásíme z našeho serveru.

Když jsme se přihlásili do jiné relace, bylo třeba ji spustit znovu, takže pokud ji plánujete používat poměrně často, možná ji budete chtít přidat do všech příslušných spouštěcích skriptů. Řádek jsme přidali do našeho souboru .bash_login a zdálo se, že funguje pokaždé, když jsme použili přihlašovací výzvu, aniž bychom ji museli znovu spouštět, i když pro práci s jiným shellem možná budete muset najít jiné umístění.

Možná jste si všimli, že tuto chybovou zprávu spouští pouze určité hardwarové konfigurace. Je to proto, že se to obvykle děje na strojích s velkým množstvím fyzické paměti RAM, ale s nižšími limity, jak ji používat. Java se pokusí přidělit obrovský blok, jen aby mu bylo řečeno, že nemůže, což interpretuje jako nedostatek paměti.

Metoda 3: Tisk aktuálních možností Java

Pokud pracujete na příkazovém řádku a chcete rychlý odkaz na to, na co jste aktuálně nastavili hodnotu _JAVA_OPTIONS, jednoduše spusťte echo $ _JAVA_OPTIONS a okamžitě vytiskne aktuální hodnoty. To je užitečné při řešení potíží, když se snažíte zjistit správné číslice k vyzkoušení.

Mějte na paměti, že i když by tato oprava neměla vyžadovat žádné další hraní, Java vyhodí zprávu „nemohl jsem vyhradit dostatek místa pro haldu objektů“, pokud se někdy ocitnete skutečně na krátkém konci virtuální paměti. Pokud je to váš případ, budete chtít znovu zkontrolovat, jaké procesy aktuálně běží, a případně restartovat server, pokud je to možné. Můžete také vytvořit více odkládacího prostoru, ale pokud se jedná o problém, je obecně lepší pokusit se jej opravit jiným způsobem.

Ve výjimečných případech, kdy se vaše nastavení jeví jako správné, ale stále nefunguje, zkontrolujte, zda jste nainstalovali 64bitový balíček Java, protože by měl být imunní vůči tomuto problému. Požadavky na souvislou paměť platí pouze pro 32bitovou verzi prostředí Java. V několika případech jsme zjistili, že 64bitová verze se pokusila vytvořit 32bitový virtuální stroj, takže zadání možnosti -d64 na příkazovém řádku to pro nás opravilo.

Doporučená

Oprava: Minecraft neodpovídá
Co je aplikace pro registraci zařízení digitální televize a měla by být odstraněna?
Co je FileRepMalware a měli byste jej odebrat