Hướng dẫn javascript heap out of memory docker build - javascript heap ra khỏi bộ nhớ docker build

Thông thường tôi chạy ứng dụng của mình dưới dạng npm run dev và trong tệp pack.json có tập lệnh như bên dướinpm run dev and in the package.json file has script like below

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

Ở đây mọi thứ hoạt động tốt.

Tôi đang xây dựng hình ảnh docker dựa trên dưới đây dockerfile

FROM node:14.17-alpine

RUN npm i -g 


RUN npm i -g nodemon

RUN apk add g++ make python


WORKDIR /app 

ADD package*.json ./

RUN npm install

ADD . .

CMD npm run dev

Tôi có thể xây dựng thành công hình ảnh bằng cách sử dụng

 docker build --tag test-backend .

Và khi tôi hình ảnh này

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

Tôi đang đối mặt với sự ngừng hoạt động của bộ nhớ 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...

Lý do ăn xin nguyên nhân này là gì ??

Với nhiều dự án sở thích của tôi chạy trên các trường hợp đám mây nhỏ, có một vấn đề mà tôi thường gặp phải khi tôi cần xây dựng một thùng chứa Docker trên máy như vậy. JavaScript đáng sợ trút bỏ lỗi bộ nhớ, dẫn đến lỗi xây dựng. May mắn thay, có một cách rẻ tiền và dễ dàng để giải quyết vấn đề này.JavaScript heap out of memory error, which results in a build failure. Luckily there's a cheap and easy way to work around this issue.

Tại sao các bản dựng của chúng tôi thất bại

Mặc dù các trường hợp đám mây nhỏ thường tốt cho các ứng dụng không nhận được một tấn lưu lượng truy cập, nhưng thường có một yếu tố có thể rất hạn chế: bộ nhớ. Một VPS nhỏ thường đi kèm với 0,5-1 GIB của bộ nhớ. Tuy nhiên, các quy trình xây dựng hiện đại của các ứng dụng JavaScript dễ dàng vượt quá các giới hạn này và tôi đã trải qua vấn đề này với nhiều ứng dụng dựa trên Strapi và Next.js. Điều xấu về nó? Chà, chúng tôi không thể xây dựng một ứng dụng trên máy chủ hoàn toàn có thể chạy ứng dụng sau khi được xây dựng.memory. A small VPS usually comes with 0.5-1 GiB of memory. However, modern building processes of JavaScript applications easily exceed these limits and I've experienced this problem with many strapi and next.js based applications. The bad thing about it? Well, we're not able to build an application on a server which is perfectly able to run the app once its built.

Giải pháp rẻ và dễ dàng

Cách dễ nhất để giải quyết vấn đề này là xây dựng hình ảnh cục bộ và sau đó chuyển nó sang VPS. Đây là nơi các lệnh lưu và tải của Docker có ích.save and load commands come in handy.

docker save  | gzip > .tar.gz

Cho phép chúng tôi lưu một hình ảnh được xây dựng cục bộ vào tệp .tar.gz, từ đó có thể được tải trên máy khác thông qua:

docker load -i .tar.gz>

Do đó, đối với các trường hợp đơn giản mà tôi không muốn sử dụng các dịch vụ bên ngoài bổ sung để xây dựng một ứng dụng, tôi đã thiết lập một tập lệnh được gọi từ một cái móc git:

#!/bin/bash

# build locally
docker build -t sample-app .
# expor to .tar.gz
docker save sample-app | gzip > sample-app.tar.gz
# transfer .tar.gz to remote machine
scp sample-app.tar.gz username@smallinstance:/tmp
# invoke load on remote machine
ssh username@smallinstance docker load -i /tmp/sample-app.tar.gz

Lựa chọn thay thế

Mặc dù quá trình giải thích ở trên có lẽ là cách dễ nhất mà không có bất kỳ dịch vụ và cài đặt bổ sung nào, nhưng có những lựa chọn thay thế mang lại lợi thế với chi phí phức tạp.

Sử dụng sổ đăng ký Docker: Thay vì chuyển hình ảnh trong tệp .tar.gz, thường là một ý tưởng tốt hơn để sử dụng sổ đăng ký Docker. Đối với các lần tái lập tư nhân, chúng tôi cần phải trả một khoản phí nhỏ hàng tháng cho dịch vụ này trên Docker.com hoặc tự lưu trữ một sổ đăng ký Docker.:
Instead of transfering the image in a .tar.gz file, its usually a better idea to use a docker registry. For private reposities, we need to either pay a small monthly fee for this service on docker.com or self-host a docker registry.

Sử dụng một máy chủ xây dựng bên ngoài: Có vô số dịch vụ có sẵn để xây dựng các ứng dụng của chúng tôi và một điểm mà các lợi thế của việc sử dụng dịch vụ đó được đạt được rất nhanh. Khi chúng tôi sử dụng Docker.com để lưu trữ hình ảnh của chúng tôi, cũng có khả năng xây dựng hình ảnh trên máy chủ của họ.: There's a multitude of services available to build our applications and a point where the advantages of using such a service is reached very quickly. When we're using docker.com to host our images, there's also the possibility to build the image on their servers.

Question:

Docker JavaScript là gì?npm run dev and in the package.json file has script like below

"scripts":{:{

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;"dev":"nodemon server.ts",

    }}

Ở đây mọi thứ hoạt động tốt.

Tôi xây dựng hình ảnh docker dựa trên dưới đây dockerfile

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Từ nút: 14,17-alpinenode:14.17-alpine

Chạy [email protected]npmi-gtypescript@4.2.4

Chạy NPMI-Gnodemonnpmi-gnodemon

Chạy apk addg ++ makepythonapk add g++makepython

WorkDir/Ứng dụng/app

Thêm gói*.json./package*.json./

Chạy cài đặt NPMnpm install

ADD....

CMD NPM Run Devnpm run dev

Tôi có thể xây dựng thành công hình ảnh bằng cách sử dụng

Docker Build-Thử nghiệm backend.build--tag test-backend.

Và khi tôi hình ảnh này

Docker Run & NBSP; & NBSP; -IT-P3003: 3003Test-Backendrun  -it-p3003:3003test-backend

Tôi phải đối mặt với sự ngừng hoạt động của bộ nhớ JavaScript

Với nhiều dự án sở thích của tôi chạy trên các trường hợp đám mây nhỏ, có một vấn đề mà tôi thường gặp phải khi tôi cần xây dựng một thùng chứa Docker trên máy như vậy. JavaScript đáng sợ trút bỏ lỗi bộ nhớ, dẫn đến lỗi xây dựng. May mắn thay, có một cách rẻ tiền và dễ dàng để giải quyết vấn đề này.---Last few GCs--->

. ) Phân bổ thất bại Scavenge có thể không thành công31:0x55effca3d8e0]    57856ms:Mark-sweep(reduce) 989.3(996.6)->988.2(997.9)MB,1275.1/0.0ms  (average mu= 0.173,current mu=0.035)allocation failure scavenge might notsucceed

. ) Phân bổ thất bại Scavenge có thể không thành công31:0x55effca3d8e0]    59100 ms:Mark-sweep(reduce)989.3(999.9)->988.5(999.4)MB,1206.7/ 0.0ms  (average mu=0.107,current mu=0.030)allocation failure scavenge might notsucceed

Với nhiều dự án sở thích của tôi chạy trên các trường hợp đám mây nhỏ, có một vấn đề mà tôi thường gặp phải khi tôi cần xây dựng một thùng chứa Docker trên máy như vậy. JavaScript đáng sợ trút bỏ lỗi bộ nhớ, dẫn đến lỗi xây dựng. May mắn thay, có một cách rẻ tiền và dễ dàng để giải quyết vấn đề này.--- JS stacktrace--->

. ) Phân bổ thất bại Scavenge có thể không thành côngERROR:Ineffective mark-compacts near heap limit Allocation failed-JavaScript heap out of memory

. ) Phân bổ thất bại Scavenge có thể không thành công

Lỗi nghiêm trọng: Các lần cộng đồng hóa không hiệu quảnodemon]app crashed-waiting forfilechanges before starting...

Hủy bỏ

Answer:

[Nodemon] Ứng dụng bị sập các forfilechange chờ đợi trước khi bắt đầu ...

Lý do ăn xin nguyên nhân này là gì ??

Tôi đang cố gắng khắc phục vấn đề tương tự. Về cơ bản, vấn đề xảy ra vì quá trình này sẽ nhận được nhiều bộ nhớ hơn bởi hệ thống. Ví dụ: nếu máy của bạn có 2GB bộ nhớ, quá trình quá tải bộ nhớ có sẵn.

Cài đặt này hoạt động cho tôi.Tôi hy vọng những bình luận này có thể giúp bạn.

Làm cách nào để ngăn chặn JavaScript ra khỏi bộ nhớ?

Mở menu bắt đầu, tìm kiếm cài đặt hệ thống nâng cao và chọn khớp tốt nhất.Trong trường Tên biến, nhập Node_Options.Trong trường giá trị biến, nhập--Max-cũ-Space-Size = 4096.Giá trị này sẽ phân bổ 4GB bộ nhớ ảo vào nút.

Tại sao JavaScript ra khỏi bộ nhớ xảy ra?

Điều này thường xảy ra trên các dự án lớn hơn trong đó lượng bộ nhớ mặc định được phân bổ bởi nút (1.5GB) là không đủ để hoàn thành lệnh thành công..

Điều gì xảy ra khi Docker hết bộ nhớ?

Theo mặc định, nếu xảy ra lỗi ngoài bộ nhớ (OOM), kernel sẽ giết các quá trình trong một thùng chứa.the kernel kills processes in a container.

Docker JavaScript là gì?

Docker là một công cụ cho phép bạn đóng gói môi trường để chạy ứng dụng của mình cùng với chính ứng dụng.Bạn có thể thực hiện điều này đơn giản như bao gồm một tệp duy nhất có tên Dockerfile với dự án của bạn.a tool that allows you package the environment for running your application along with the application itself. You can accomplish this as simply as including a single file called Dockerfile with your project.