Cách khắc phục Đánh dấu không hiệu quả gần giới hạn heap Phân bổ không thành công heap JavaScript hết bộ nhớ

Bài đăng tràn ngăn xếp này đề xuất một số cách khắc phục bao gồm cài đặt kích thước ngăn xếp tối đa. Không có con xúc xắc. Vẫn không hoạt động. Tôi đã thử một số bản sửa lỗi cụ thể của nút khác. Không

Nó có phải là một vấn đề bộ nhớ đệm? . Nó có thể là một vấn đề bộ nhớ đệm

Vì vậy, sửa chữa sau đó là gì? . Webpacker lưu trữ nội bộ bộ nhớ cache trong

node --max-old-space-size=4096 `which npm` install
0 để thực hiện các thao tác đọc/ghi nhanh hơn, do đó, nó không phải đóng gói đầy đủ tất cả nội dung của bạn và sử dụng bộ nhớ cache để tăng tốc mọi thứ

Cả hai lỗi trên đều xảy ra khi JavaScript có nhiều tiến trình cần xử lý và bộ nhớ được cấp phát mặc định bởi Node không đủ để kết thúc tiến trình đang chạy

Có thể tìm thấy một ví dụ về lỗi này khi bạn phải xây dựng các gói bạn đã cài đặt bằng cách sử dụng

node --max-old-space-size=4096 `which npm` install
1 với thư viện nút-gyp

Giới hạn bộ nhớ Node mặc định khác nhau giữa các phiên bản, nhưng phiên bản Node 15 mới nhất vẫn có giới hạn bộ nhớ dưới 2GB

Giải quyết lỗi heap JavaScript hết bộ nhớ

Để sửa lỗi JavaScript heap out of memory, bạn cần thêm tùy chọn

node --max-old-space-size=4096 `which npm` install
2 khi chạy lệnh npm

Đây là một ví dụ về việc tăng giới hạn bộ nhớ lên 4GB

node --max-old-space-size=4096 index.js

Nếu bạn muốn thêm tùy chọn khi chạy lệnh

node --max-old-space-size=4096 `which npm` install
1 thì có thể chuyển tùy chọn từ Node sang npm như sau

node --max-old-space-size=4096 `which npm` install

Nếu bạn vẫn thấy lỗi heap out of memory, thì bạn có thể cần phải tăng kích thước heap hơn nữa. Kích thước bộ nhớ bắt đầu từ

node --max-old-space-size=4096 `which npm` install
4 cho 1GB

--max-old-space-size=1024 # increase memory to 1GB
--max-old-space-size=2048 # increase memory to 2GB
--max-old-space-size=3072 # increase memory to 3GB
--max-old-space-size=4096 # increase memory to 4GB
--max-old-space-size=8192 # increase memory to 8GB

Ngoài ra, bạn cũng có thể đặt giới hạn bộ nhớ cho toàn bộ môi trường của mình bằng tệp cấu hình

Đặt giới hạn bộ nhớ Node bằng tệp cấu hình

Bạn có thể đặt giới hạn bộ nhớ mặc định bằng cách sử dụng tệp cấu hình của máy khách đầu cuối của mình

Nếu bạn đang sử dụng Bash, hãy thêm dòng sau vào tệp

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
0 của bạn

export NODE_OPTIONS=--max_old_space_size=4096 #4GB

Khi bạn đang sử dụng ZSH, hãy thêm dòng trên vào tệp

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1

Đừng quên kiểm tra bộ nhớ còn trống trong máy trước khi tăng giới hạn bộ nhớ

Quá nhiều bộ nhớ được phân bổ cho Node có thể khiến máy của bạn bị treo

Tại sao đống JavaScript hết bộ nhớ xảy ra?

Trước khi tạo Nút, vai trò của JavaScript trong phát triển web bị giới hạn trong việc thao tác các phần tử DOM để tạo trải nghiệm tương tác cho người dùng ứng dụng web của bạn

Nhưng sau khi phát hành Node, JavaScript đột nhiên có kiến ​​trúc back-end, nơi bạn có thể chạy các truy vấn cơ sở dữ liệu phức tạp và xử lý nặng khác trước khi gửi dữ liệu trở lại front-end

JavaScript cũng chứng kiến ​​sự gia tăng của npm cho phép bạn tải xuống các thư viện và mô-đun như React và Lodash

Nhiều mô-đun được tải xuống từ npm có nhiều phụ thuộc vào các mô-đun khác và một số có thể cần được biên dịch trước khi chúng có thể được sử dụng

Việc sử dụng bộ nhớ nút sẽ tăng lên khi bạn có nhiều tác vụ hơn để xử lý. Đây là lý do tại sao hôm nay JavaScript có thể gặp lỗi hết bộ nhớ

Điều này thường xảy ra trên các dự án lớn hơn khi lượng bộ nhớ mặc định được cấp phát bởi Nút (1. 5gb) không đủ để hoàn thành lệnh thành công

Nghị quyết

Bạn có thể tăng dung lượng bộ nhớ được phân bổ cho lệnh bằng cách chạy lệnh sau trước khi chạy Snyk CLI

Linux/macOS

export NODE_OPTIONS=--max-old-space-size=8192

Ví dụ

export NODE_OPTIONS=--max-old-space-size=8192
snyk test
export NODE_OPTIONS=--max-old-space-size=8192
snyk monitor

các cửa sổ

Từ bảng điều khiển, đi tới Hệ thống -> Cài đặt hệ thống nâng cao -> Biến môi trường -> Mới (người dùng hoặc hệ thống) và tăng giá trị Biến như trong ảnh chụp màn hình sau

Cách khắc phục Đánh dấu không hiệu quả gần giới hạn heap Phân bổ không thành công heap JavaScript hết bộ nhớ

Hoặc làm điều này trong powershell với những điều sau đây

 $env:NODE_OPTIONS="--max-old-space-size=8192"

Bạn cũng có thể tăng số lượng, nếu cần thiết. Một số người dùng đã tăng mức này lên tới 14gb cho một số dự án lớn hơn

Đống JavaScript là gì?

Đống. Nó dùng để lưu trữ các đối tượng và hàm trong JavaScript . Công cụ không phân bổ một lượng bộ nhớ cố định. Thay vào đó, nó phân bổ nhiều không gian hơn theo yêu cầu.

Bộ nhớ heap là gì?

Bộ nhớ “heap”, còn được gọi là bộ nhớ “động”, là một giải pháp thay thế cho bộ nhớ ngăn xếp cục bộ . Bộ nhớ cục bộ khá tự động. Các biến cục bộ được cấp phát tự động khi một hàm được gọi và chúng sẽ tự động được hủy bỏ khi hàm thoát. Bộ nhớ heap khác nhau về mọi mặt.