node.js - JavaScript-haug utslitt for minne under kjøring av Docker-bilde


Vanligvis kjører jeg applikasjonen min som npm run dev, og i filen package.json har skript som nedenfor

"scripts": {
        "dev": "nodemon server.ts",
    }

her fungerer alt fint.

Jeg bygger et Docker-bilde basert på Dockerfile nedenfor

FROM node:14.17-alpine

RUN npm i -g [email 


RUN npm i -g nodemon

RUN apk add g++ make python


WORKDIR /app 

ADD package*.json ./

RUN npm install

ADD . .

CMD npm run dev

Jeg kan lykkes med å bygge bildet ved hjelp av

 docker build --tag test-backend .

og når jeg dette bildet

docker run  -it -p 3003:3003 test-backend

Jeg står overfor javascript heap-minneutkobling

<--- Last few GCs --->

[31:0x55effca3d8e0]    57856 ms: Mark-sweep (reduce) 989.3 (996.6) -> 988.2 (997.9) MB, 1275.1 / 0.0 ms  (average mu = 0.173, current mu = 0.035) allocation failure scavenge might not succeed
[31:0x55effca3d8e0]    59100 ms: Mark-sweep (reduce) 989.3 (999.9) -> 988.5 (999.4) MB, 1206.7 / 0.0 ms  (average mu = 0.107, current mu = 0.030) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
Aborted
[nodemon] app crashed - waiting for file changes before starting...

Hva er grunnen bak denne årsaken??

Svar #1

Jeg prøver å fikse det samme problemet. I utgangspunktet oppstår problemet fordi prosessen får mer minne tillatt av systemet. For eksempel, hvis maskinen din har 2 GB minne, overbelaster prosessen det tilgjengelige minnet.

Denne typen problem løste jeg ved å legge til en swap-fil på maskinen for å hjelpe litt med minnet (Kanskje denne artikkelen kan hjelpe deg: https://tecadmin.net/linux-create-swap/) og sette opp dette miljøet ENV NODE_OPTIONS=--max_old_space_size=2048 i din Dockerfile for å begrense minnet som vil bli brukt av node-prosessen.

I stedet for 2048, bruk samme verdi som minnet du har i maskinen din.

Denne innstillingen fungerer for meg. Jeg håper disse kommentarene kan hjelpe deg.

Svar #2

For Mac-brukere der ute! Etter at jeg la til de følgende direktivene for miljøvariablene, måtte jeg øke fra GUI (swap og minne):

ENV GENERATE_SOURCEMAP=false
ENV NODE_OPTIONS=--max-old-space-size=16384

Relaterte artikler