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

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 atsevišķā aparatūrā, vai tās VM iekšpusē, iespējams, saņemsit ziņojumu “VM inicializēšanas 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 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.

Šī var būt problēma neatkarīgi no tā, ar kuru jūs to darbināt, jo JVM nav nekāda sakara ar VM veidu, kuru jūs, iespējams, izmantojat, 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 iespējām, līdz mēs atteicāmies no sava servera.

Kad 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 jebkuram attiecīgajam startēšanas skriptam. 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 apvalku.

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, kā to izmantot. 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, kādai vērtībai 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, mēģinot noskaidrot pareizos ciparus, kurus izmēģināt.

Paturiet prātā, ka, lai gan šim labojumam nevajadzētu prasīt citas spēles, 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, kādi procesi pašlaik darbojas, un, iespējams, restartējiet 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.