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
