Đã đạt đến giới hạn phân bổ heap không thành công javascript heap hết bộ nhớ nextjs

Các bạn đọc like ủng hộ MUO nhé. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm

Một vấn đề phổ biến khi làm việc trên Nút JavaScript. js bị lỗi “JavaScript heap out of memory”. Lỗi này thường xảy ra khi bộ nhớ mặc định được hệ thống của bạn phân bổ cho Nút. js không đủ để chạy một dự án lớn

Lỗi phổ biến cho dù bạn chạy dự án của mình trên Windows, macOS hay bản phân phối Linux như Ubuntu. May mắn thay, có một vài cách khắc phục dễ dàng có thể giúp giải quyết lỗi “JavaScript heap out of memory”

Bộ nhớ Heap là gì?

Trước khi xem xét sửa lỗi, bạn nên hiểu bộ nhớ heap là gì và các chương trình sử dụng nó như thế nào

Bộ nhớ được cấp phát trên heap hệ thống còn được gọi là bộ nhớ cấp phát động. Người lập trình có quyền sử dụng bộ nhớ khả dụng khi họ thấy phù hợp. Quan trọng hơn, kích thước heap cho một chương trình phụ thuộc vào bộ nhớ ảo khả dụng được phân bổ cho nó

Nếu bạn đang chạy một dự án tương đối lớn, nó có thể yêu cầu nhiều bộ nhớ hơn khối lượng được phân bổ mặc định. Điều này có thể khiến dự án của bạn gặp sự cố và ghi lỗi “JavaScript heap out of memory”

Cách khắc phục JavaScript Heap hết bộ nhớ trên Windows

Bất kể IDE của bạn là gì, bản sửa lỗi “JavaScript heap out of memory” đều giống hệt nhau

Bạn có thể thêm biến môi trường thông qua Bảng điều khiển để tăng bộ nhớ được phân bổ cho Nút. dự án js

  1. Mở menu Bắt đầu, tìm kiếm Cài đặt hệ thống nâng cao và chọn Kết quả phù hợp nhất
  2. Từ hộp thoại, nhấp vào Biến môi trường, sau đó nhấp vào Mới từ biến hệ thống hoặc biến người dùng. Cái trước áp dụng cho tất cả người dùng trên máy tính của bạn, trong khi cái sau chỉ ảnh hưởng đến tài khoản hiện tại của bạn
  3. Trong trường Tên biến, nhập NODE_OPTIONS. Trong trường Giá trị biến, hãy nhập --max-old-space-size=4096. Giá trị này sẽ phân bổ 4GB bộ nhớ ảo cho Node. js. Để đặt một giá trị khác, hãy nhân số lượng bạn yêu cầu tính bằng GB với 1024 [giá trị biến cần tính bằng MB]

  4. Nhấp vào OK để lưu các thay đổi của bạn, sau đó nhấp vào Áp dụng và cuối cùng nhấp vào OK một lần nữa. Khởi động lại dự án của bạn để những thay đổi có hiệu lực

Bạn cũng có thể đặt biến môi trường thông qua thiết bị đầu cuối Windows PowerShell

Khởi chạy thiết bị đầu cuối PowerShell, nhập lệnh bên dưới và nhấn Enter

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

Nếu bạn chỉ muốn tạm thời tăng bộ nhớ heap, hãy chạy lệnh bên dưới trong thiết bị đầu cuối PowerShell trước khi chạy dự án của bạn

 set NODE_OPTIONS=--max-old-space-size=4096 

Khi bạn đã nhập lệnh này, bạn có thể triển khai/chạy dự án của mình bằng cách sử dụng npm run dev hoặc tập lệnh của riêng bạn

Hãy nhớ luôn nhập kích thước bộ nhớ được yêu cầu tính bằng MB. Không làm như vậy có thể gây ra hành vi không mong muốn trong chương trình của bạn. Điều quan trọng nữa là không phân bổ toàn bộ bộ nhớ khả dụng của bạn vì điều này có thể gây ra lỗi hệ thống nghiêm trọng

Cách khắc phục lỗi JavaScript Heap Out of Memory trên macOS và Linux

Trên macOS và Linux, cách khắc phục bộ nhớ heap rất giống nhau. Bạn nên xuất một biến môi trường chỉ định dung lượng bộ nhớ ảo được phân bổ cho Nút. js

Trong thiết bị đầu cuối của bạn, trước khi bạn chạy dự án của mình, hãy nhập lệnh sau và nhấn Enter

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

Điều này sẽ phân bổ 4GB bộ nhớ ảo cho không gian thực thi của Node. js. Để đặt dung lượng bộ nhớ khác, hãy thay thế 4096 bằng dung lượng yêu cầu tính bằng MB

Bạn có thể thêm lệnh trên vào tệp cấu hình của mình để tránh lặp lại quy trình. Để làm như vậy, hãy làm theo quy trình tương tự để đặt biến PATH của bạn

Tránh lỗi JavaScript Heap Out of Memory

Bạn có thể tránh lỗi này bằng cách đảm bảo chương trình của bạn không bị rò rỉ bộ nhớ. Quản lý bộ nhớ phù hợp là rất quan trọng khi viết chương trình của bạn, đặc biệt là bằng ngôn ngữ cấp thấp

Mặc dù việc tăng bộ nhớ được phân bổ sẽ tạm thời khắc phục sự cố, nhưng bạn nên tìm ra nguyên nhân gốc rễ và khắc phục nó

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 npm install 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

 set NODE_OPTIONS=--max-old-space-size=4096 
0 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 npm install 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ừ

 set NODE_OPTIONS=--max-old-space-size=4096 
2 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, thì 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ớ

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

Đ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 .

Tổng kích thước heap JS là gì?

Ghi chú. usedJsHeapSize là tổng dung lượng bộ nhớ đang được sử dụng bởi các đối tượng JS bao gồm các đối tượng bên trong V8, totalJsHeapSize là kích thước hiện tại của heap JS bao gồm cả dung lượng trống không bị chiếm bởi bất kỳ đối tượng JS nào. This means that usedJsHeapSize can not be greater than totalJsHeapSize.

Nextjs canary là gì?

js đã phát hiện ra rằng nó không có trên bản phát hành mới nhất của chim hoàng yến. next@canary là phiên bản hoàng yến của Next. js gửi hàng ngày . Nó bao gồm tất cả các tính năng và bản sửa lỗi chưa được phát hành cho phiên bản ổn định. Hãy nghĩ về chim hoàng yến như một phiên bản beta công khai.

Chủ Đề