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=8192Ví dụ
export NODE_OPTIONS=--max-old-space-size=8192snyk testexport 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
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