Popravek: Napaka med inicializacijo VM ni mogla rezervirati dovolj prostora za kopico predmetov



Preizkusite Naš Instrument Za Odpravo Težav

Čeprav apleti Java danes niso priljubljena spletna tehnologija, obstaja nešteto razlogov, da navidezni stroj Java namestite neposredno na strežnik Linux. Če poskušate ukaz Linux Java dokončno zagnati bodisi na diskretni strojni opremi bodisi znotraj lastne VM, boste morda dobili sporočilo »Napaka med inicializacijo VM ni mogla rezervirati dovolj prostora za kopico predmetov«.



To se verjetno zdi precej čudno, ker imate več kot verjetno dovolj RAM-a za zagon ukaza, vendar je to v veliki meri posledica posebne nenavadnosti pri uporabi fizičnega in navideznega pomnilnika. Navedba nekaterih razmeroma velikih velikosti bi vam omogočila, da popolnoma zaobidete to sporočilo in zaženete ukaz java tako, kot bi to storili.



1. način: Uporaba možnosti ukazne vrstice

Če ste poskusili zagnati javo in prejeli to sporočilo, ste verjetno že zagnali brezplačni ukaz, da se prepričate, ali je na voljo dovolj pomnilnika za zagon programa.



java in brezplačni ukazi

Upoštevajte, da smo na našem testnem računalniku imeli približno 2,3 GB fizičnega RAM-a in še nobena stran navideznega pomnilnika še ni bila uporabljena. Če opazite, da imate težave s pomnilnikom, boste pred ponovnim poskusom želeli zapreti druge stvari, ki ste jih že izvedli. Po drugi strani pa lahko tisti, ki so ugotovili, da imajo dovolj prostega pomnilnika, poskušajo neposredno določiti velikost.

Na našem računalniku smo na primer lahko zagnali ukaz kot java -Xms256m -Xmx512M in je deloval, kot bi sicer pričakovali. To omejuje velikost kopice, ki jo navidezni stroj Java poskuša rezervirati ob zagonu. Ker bi lahko neoviran navidezni stroj hipotetično počel nenavadne stvari, bi lahko vrgel sporočila o napakah na sicer brezplačen sistem. Morda se boste morda želeli poigrati s tema dvema vrednostma, preden boste našli pravo kombinacijo.



To je lahko težava ne glede na to, na katerem jo izvajate, saj JVM nima nič skupnega s tipom VM, ki ga morda uporabljate za zagon GNU / Linux.

2. način: izvoz spremenljivk, da sprememba postane trajna

Ko najdete vrednost, ki deluje, jo lahko izvozite, da postane trajna za to sejo. Na primer, uporabili smo izvoz _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ iz ukaznega poziva bash in nam omogočil, da smo ukaz java zagnali sami, brez kakršnih koli drugih možnosti, dokler se nismo odjavili s strežnika.

Ko smo se prijavili v drugo sejo, ga je bilo treba znova zagnati, zato ga boste morda želeli dodati ustreznim zagonskim skriptom, če nameravate ukaz java uporabljati pogosto. Datoteko smo dodali v datoteko .bash_login in zdelo se je, da deluje vsakič, ko smo uporabili poziv za prijavo, ne da bi ga bilo treba znova zagnati, čeprav boste morda morali poiskati drugo lokacijo zanj, če delate z drugo lupino.

Morda ste opazili, da samo nekatere konfiguracije strojne opreme sprožijo to sporočilo o napaki. To je zato, ker se ponavadi dogaja na strojih z veliko fizičnega RAM-a, vendar manjše omejitve, kako ga uporabiti. Java bo poskušala dodeliti ogromen blok, le da mu bodo povedali, da ne more, kar pa razlaga kot zmanjšanje pomnilnika.

3. način: Tiskanje trenutnih možnosti Java

Če ste delali v ukazni vrstici in želite hiter sklic na to, na kar ste trenutno nastavili vrednost _JAVA_OPTIONS, preprosto zaženite echo $ _JAVA_OPTIONS in takoj bo natisnil trenutne vrednosti. To je koristno za odpravljanje težav, ko poskušate ugotoviti prave številke, ki jih želite poskusiti.

Upoštevajte, da čeprav ta popravek ne bi smel zahtevati nobenega drugega igranja, bo Java vrgla sporočilo 'ni bilo mogoče rezervirati dovolj prostora za kopico predmetov', če se kdaj resnično znajdete na kratkem koncu navideznega spomina. V tem primeru boste morali še enkrat preveriti, kateri procesi se trenutno izvajajo, in morda znova zagnati strežnik, če je to možnost. Lahko bi tudi ustvarili več prostora za zamenjavo, vendar če je to težava, je na splošno bolje, da jo poskusite popraviti na drug način.

V redkih primerih, ko se zdi, da so vaše nastavitve pravilne, vendar še vedno ne delujejo, preverite, ali ste namestili 64-bitni paket Java, ker bi moral biti odporen na to težavo. Neprekinjene zahteve glede pomnilnika veljajo le za 32-bitno različico Jave. V peščici primerov smo ugotovili, da je 64-bitna različica poskušala ustvariti 32-bitni navidezni stroj, zato smo jo določili z možnostjo -d64 v ukazni vrstici.

3 minute branja