Labojums: VM inicializācijas laikā radusies kļūda nevarēja rezervēt pietiekami daudz vietas objekta kaudzei



Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai

Kaut arī Java sīklietotnes mūsdienās nav populāra tīmekļa tehnoloģija, Java virtuālās mašīnas izvietošanai tieši Linux serverī ir neskaitāmi iemesli. Ja mēģināt palaist Linux java komandu tieši vai nu uz atsevišķas aparatūras, vai tās VM iekšpusē, iespējams, saņemsit ziņojumu “VM inicializācijas laikā radusies kļūda nevarēja rezervēt pietiekami daudz vietas objekta kaudzei”.



Tas, iespējams, izskatās diezgan dīvaini, jo jums, visticamāk, ir pietiekami daudz RAM, lai palaistu komandu, taču tas lielā mērā ir saistīts ar īpašu dīvainību, kādā tiek izmantotas fiziskās un virtuālās atmiņas lapas. Norādot dažus salīdzinoši lielus izmērus, jums vajadzētu pilnībā apiet šo ziņojumu un palaist komandu java tāpat, kā jūs to darītu.



1. metode: komandrindas opciju izmantošana

Ja esat mēģinājis palaist Java un saņēmāt šo ziņojumu, iespējams, jau esat palaidis bezmaksas komandu, lai pārliecinātos, ka ir pietiekami daudz atmiņas, lai palaistu programmu.



java un bezmaksas komandas

Ievērojiet, ka mūsu testa mašīnā mums bija aptuveni 2,3 GB fiziskās operatīvās atmiņas un vēl nebija izmantota viena virtuālās atmiņas lapa. Ja pamanāt, ka jums ir problēmas ar atmiņu, pirms vēlreiz mēģiniet aizvērt citas palaistās lietas. No otras puses, tie, kuri atklāja, ka viņiem ir daudz brīvas atmiņas, var mēģināt tieši norādīt izmēru.

Piemēram, mūsu mašīnā mēs varējām palaist komandu kā java -Xms256m -Xmx512M, un tā darbojās tā, kā tas būtu citādi gaidīts. Tas ierobežo kaudzes lielumu, kuru Java virtuālā mašīna mēģina rezervēt startēšanas laikā. Tā kā neierobežota virtuālā mašīna hipotētiski varētu darīt neparastas lietas, tā varētu mest kļūdas ziņojumus citādi brīvā sistēmā. Varat arī vēlēties izspēlēt šīs divas vērtības, pirms atrodat pareizo kombināciju.



Tā var būt problēma neatkarīgi no tā, ar kuru jūs to darbināt, jo JVM nav nekāda sakara ar to VM veidu, kuru jūs varētu izmantot, lai palaistu GNU / Linux.

2. metode: Mainīgo eksportēšana, lai izmaiņas būtu pastāvīgas

Atrodot derīgu vērtību, varat to eksportēt, lai padarītu to pastāvīgu šai sesijai. Piemēram, mēs izmantojām eksportu _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ no bash komandrindas, un tas ļāva mums pats palaist komandu java bez jebkādām citām opcijām, līdz izrakstījāmies no sava servera.

Kad mēs pieteicāmies citā sesijā, tas bija jādarbina vēlreiz, tāpēc, ja plānojat diezgan bieži izmantot java komandu, ieteicams to pievienot visiem attiecīgajiem startēšanas skriptiem. Mēs pievienojām rindiņu mūsu .bash_login failam, un šķita, ka tas darbojas katru reizi, kad izmantojām pieteikšanās uzvedni, to vairs nedarbinot, lai gan, iespējams, jums būs jāatrod cita atrašanās vieta, ja strādājat ar citu čaulu.

Iespējams, esat pamanījis, ka tikai dažas aparatūras konfigurācijas aktivizē šo kļūdas ziņojumu. Tas ir tāpēc, ka tas parasti notiek mašīnās ar lielu fizisko operatīvo atmiņu, bet ar zemāku daudzumu tās izmantošanas. Java mēģinās piešķirt milzīgu bloku tikai tam, lai pateiktu, ka tas nav iespējams, un ko tas interpretē kā atmiņas trūkumu.

3. metode: pašreizējo Java opciju drukāšana

Ja esat strādājis komandrindā un vēlaties ātri uzzināt, uz ko pašlaik esat iestatījis vērtību _JAVA_OPTIONS, vienkārši palaidiet echo $ _JAVA_OPTIONS, un tas nekavējoties izdrukās pašreizējās vērtības. Tas ir noderīgi problēmu novēršanai, kad mēģināt noskaidrot pareizos ciparus, kurus izmēģināt.

Paturiet prātā, ka, lai gan šim labojumam nevajadzētu prasīt citu spēlēšanu, Java izmetīs ziņojumu “nevarēja rezervēt pietiekami daudz vietas objektu kaudzei”, ja kādreiz patiesi atradīsit virtuālās atmiņas īso galu. Ja tas tā ir, tad vēlēsities vēlreiz pārbaudīt pašreiz notiekošos procesus un, iespējams, restartēt serveri, ja tā ir iespēja. Jūs varētu arī izveidot vairāk vietas apmaiņai, taču, ja tas ir jautājums, labāk mēģināt to labot kādā citā veidā.

Retos gadījumos, kad jūsu iestatījumi, šķiet, ir pareizi, bet tas joprojām nedarbojas, pārliecinieties, vai esat instalējis 64 bitu Java pakotni, jo tai vajadzētu būt neaizsargātai pret šo problēmu. Nepieciešamās atmiņas prasības attiecas tikai uz Java 32 bitu versiju. Dažos gadījumos mēs atradām 64 bitu versiju, lai mēģinātu izveidot 32 bitu virtuālo mašīnu, tāpēc komandrindā norādot opciju -d64, mēs to izlabojām.

3 minūtes lasīts