NUSTATYTI: Inicijuojant VM įvyko klaida negalėjo rezervuoti pakankamai vietos objekto kaupui

Nors šiais laikais „Java“ programėlės nėra populiarios interneto technologijos, egzistuoja begalė priežasčių „Java“ virtualią mašiną dislokuoti tiesiai į „Linux“ serverį. Jei bandysite paleisti „Linux java“ komandą tiesiai diskrečioje aparatinėje įrangoje arba savo VM viduje, galite gauti pranešimą „VM inicijuojant įvyko klaida negalėjo rezervuoti pakankamai vietos objekto kaupui“.

Tai tikriausiai atrodo gana keista, nes daugiau nei tikėtina, kad turite pakankamai RAM, kad paleistumėte komandą, tačiau daugiausia dėl to, kad fiziniai ir virtualiosios atminties puslapiai naudojami įprastu būdu. Nurodę kai kuriuos gana didelius dydžius, turėtumėte visiškai apeiti šį pranešimą ir paleisti „java“ komandą taip, kaip darytumėte bet kuris kitas.

1 metodas: naudokite komandų eilutės parinktis

Jei bandėte paleisti „Java“ ir gavote šį pranešimą, tikriausiai jau vykdėte nemokamą komandą, kad įsitikintumėte, jog yra pakankamai atminties, kad būtų galima paleisti programą.

„Java“ ir nemokamos komandos

Atkreipkite dėmesį, kad bandomojoje mašinoje mes turėjome maždaug 2,3 GB fizinės operatyviosios atminties ir dar nė vienas virtualiosios atminties puslapis nebuvo naudojamas. Jei pastebėsite, kad turite atminties trūkumų, prieš bandydami dar kartą, norėsite uždaryti kitus paleistus dalykus. Kita vertus, tie, kurie nustatė, kad turi daug laisvos atminties, gali bandyti tiesiogiai nurodyti dydį.

Pavyzdžiui, savo kompiuteryje mes galėjome paleisti komandą kaip java -Xms256m -Xmx512M ir ji veikė taip, kaip to būtų galima tikėtis kitu atveju. Tai riboja kaupo dydį, kurį „Java“ virtuali mašina bando rezervuoti paleidimo metu. Kadangi nevaržoma virtuali mašina hipotetiškai gali daryti neįprastus dalykus, ji gali mesti klaidų pranešimus į šiaip nemokamą sistemą. Taip pat galbūt norėsite pažaisti šias dvi vertybes, kol rasite tinkamą derinį.

Tai gali būti problema, neatsižvelgiant į tai, ką jūs naudojate, nes JVM neturi nieko bendro su VM tipu, kurį galbūt naudojate paleisdami GNU / Linux.

2 metodas: Kintamųjų eksportavimas, kad pakeitimas būtų nuolatinis

Radę veikiančią vertę, galite ją eksportuoti, kad ji būtų nuolatinė tam seansui. Pavyzdžiui, iš „bash“ komandų eilutės naudojome eksportą _JAVA_OPTIONS = '- Xms256M -Xmx512M' ir tai leido mums pačiam paleisti „java“ komandą be jokių kitų parinkčių, kol atsijungsime nuo serverio.

Jį reikėjo paleisti dar kartą, kai prisijungėme prie kito seanso, todėl galbūt norėsite jį pridėti prie visų susijusių paleisties scenarijų, jei planuojate gana dažnai naudoti „java“ komandą. Pridėjome eilutę prie .bash_login failo ir atrodė, kad ji veikia kiekvieną kartą, kai naudojome prisijungimo raginimą, nebereikėję jo paleisti iš naujo, nors jums gali tekti rasti kitą jo vietą, jei dirbate su kitu apvalkalu.

Galbūt pastebėjote, kad šį klaidos pranešimą suaktyvina tik tam tikros aparatūros konfigūracijos. Taip yra todėl, kad dažniausiai tai atsitinka mašinose, kuriose yra daug fizinės operatyviosios atminties, tačiau mažesni tikslai, kaip ją naudoti. „Java“ bandys skirti didžiulį bloką tik tam, kad būtų pasakyta, jog jis negali, kurio, jos manymu, trūksta atminties.

3 metodas: dabartinių „Java“ parinkčių spausdinimas

Jei dirbote komandinėje eilutėje ir norite greitai sužinoti, į ką šiuo metu nustatėte vertę _JAVA_OPTIONS, tiesiog paleiskite echo $ _JAVA_OPTIONS ir ji iškart išspausdins dabartines reikšmes. Tai naudinga šalinant triktis, kai bandote išsiaiškinti tinkamus skaitmenis, kuriuos reikia išbandyti.

Turėkite omenyje, kad nors šiam pataisymui nereikėtų jokių kitų žaidimų, „Java“ išmes pranešimą „negalėjo rezervuoti pakankamai vietos objektų kaupui“, jei kada nors tikrai atsidursite trumpame virtualiosios atminties gale. Tokiu atveju turėsite dar kartą patikrinti, kokie procesai šiuo metu vykdomi, ir galbūt iš naujo paleiskite serverį, jei tai yra galimybė. Taip pat galite sukurti daugiau vietos apsikeitimui, tačiau jei tai yra problema, geriau pabandyti ją ištaisyti kitu būdu.

Retais atvejais, kai jūsų nustatymai atrodo teisingi, bet vis tiek neveikia, įsitikinkite, kad įdiegėte 64 bitų „Java“ paketą, nes jis turėtų būti apsaugotas nuo šios problemos. Gretutinės atminties reikalavimai taikomi tik 32 bitų „Java“ versijai. Nedaugeliu atvejų 64 bitų versija bandė sukurti 32 bitų virtualią mašiną, todėl komandinėje eilutėje nurodžius -d64 parinktį, tai mums pataisė.