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
[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
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
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 NPMI-gtypescript@4.2.4npmi-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.