ram*_*393 20 node.js typescript docker
通常我运行我的应用程序,npm run dev 并且在 package.json 文件中包含如下所示的脚本
"scripts": {
"dev": "nodemon server.ts",
}
Run Code Online (Sandbox Code Playgroud)
这里一切正常。
我基于下面的 Dockerfile 构建 docker 镜像
FROM node:14.17-alpine
RUN npm i -g typescript@4.2.4
RUN npm i -g nodemon
RUN apk add g++ make python
WORKDIR /app
ADD package*.json ./
RUN npm install
ADD . .
CMD npm run dev
Run Code Online (Sandbox Code Playgroud)
我可以使用成功构建图像
docker build --tag test-backend .
Run Code Online (Sandbox Code Playgroud)
当我看到这张图片时
docker run -it -p 3003:3003 test-backend
Run Code Online (Sandbox Code Playgroud)
我面临 javascript 堆内存中断
<--- 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...
Run Code Online (Sandbox Code Playgroud)
这背后的原因是什么?
小智 36
我正在尝试解决同样的问题。基本上,问题的出现是因为该进程正在获取系统允许的更多内存。例如,如果您的计算机有 2GB 内存,则该进程会使可用内存过载。
这种问题,我通过向机器添加一个交换文件来帮助一点内存来解决(也许这篇文章可以帮助你: https: //tecadmin.net/linux-create-swap/),并ENV NODE_OPTIONS=--max_old_space_size=2048在中设置这个环境您Dockerfile限制节点进程将使用的内存。
2048请使用与计算机内存相同的值,而不是。
这个设置对我有用。我希望这些评论能够对您有所帮助。
对于 Mac 用户来说!在为环境变量添加以下指令后,我需要从 GUI(交换和内存)增加:
ENV GENERATE_SOURCEMAP=false
ENV NODE_OPTIONS=--max-old-space-size=16384
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33626 次 |
| 最近记录: |