Đối với một câu trả lời chung không hơi cho những người hạ cánh về câu hỏi này từ Google:
Hầu hết các lần khi bạn đối mặt với lỗi này, nó có thể là do rò rỉ bộ nhớ, nâng cấp thêm/phiên bản của thư viện hoặc sự khác biệt trong cách Node.js quản lý bộ nhớ giữa các phiên bản [ví dụ: Node.js phiên bản 10].
Thông thường chỉ cần tăng bộ nhớ được phân bổ cho Node.js sẽ cho phép chương trình của bạn chạy nhưng thực sự có thể không giải quyết vấn đề thực và bộ nhớ được sử dụng bởi quy trình nút vẫn có thể vượt quá bộ nhớ mới mà bạn phân bổ. Tôi khuyên bạn nên sử dụng bộ nhớ định lập trong quy trình Node.js của bạn khi nó bắt đầu chạy hoặc cập nhật lên Node.js> 10.
Tôi đã bị rò rỉ trí nhớ. Dưới đây là một bài viết tuyệt vời về việc gỡ lỗi rò rỉ bộ nhớ trong Node.js.
Điều đó nói rằng, để tăng bộ nhớ, trong thiết bị đầu cuối nơi bạn chạy quy trình Node.js:
export NODE_OPTIONS="--max-old-space-size=8192"
trong đó các giá trị của max-old-space-size
có thể là: [2048, 4096, 8192, 16384]
, v.v.
Thêm các ví dụ cho sự rõ ràng hơn nữa:
export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB
# and so on...
# formula:
export NODE_OPTIONS="--max-old-space-size=[X * 1024]" # Increase to X GB
# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes [MB] you have available.
Xem giá trị hiện tại của kích thước không gian tối đa [tính bằng MB]
Để xem giá trị hiện tại [không chính xác nhưng rất gần] của kích thước không gian tối đa [tính bằng MB], chạy trong thiết bị đầu cuối của bạn
node -e 'console.log[v8.getHeapStatistics[].heap_size_limit/[1024*1024]]'
Một vấn đề phổ biến trong khi làm việc trên dự án JavaScript Node.js là bộ JavaScript ra khỏi lỗi bộ nhớ. Lỗi này thường xảy ra khi bộ nhớ mặc định được phân bổ bởi hệ thống của bạn cho Node.js không đủ để chạy một dự án lớn.
Lỗi là phổ biến cho dù bạn chạy dự án của mình trên Windows, MacOS hoặc phân phối Linux như Ubuntu. May mắn thay, có một vài bản sửa lỗi dễ dàng có thể giúp giải quyết các bộ nhớ JavaScript ra khỏi lỗi bộ nhớ.
Bộ nhớ HEAP là gì?
Trước khi bạn xem xét sửa lỗi, thật hữu ích khi hiểu bộ nhớ heap là gì và cách các chương trình sử dụng nó.
Bộ nhớ được phân bổ trên đống hệ thống cũng được gọi là bộ nhớ được phân bổ động. Nó lên tới các lập trình viên để sử dụng bộ nhớ có sẵn 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 có sẵn đượ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 so với khối được phân bổ mặc định. Điều này có thể khiến dự án của bạn bị sập và đăng nhập các bộ nhớ JavaScript ra khỏi lỗi bộ nhớ.
Cách sửa bộ nhớ JavaScript ra khỏi bộ nhớ trên Windows
Bất kể IDE của bạn là gì, thì JavaScript đã ra khỏi bộ nhớ.
Bạn có thể thêm một biến môi trường thông qua bảng điều khiển để tăng bộ nhớ được phân bổ cho dự án Node.js.
- 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.Start menu, search for Advanced System Settings,and select the Best match.
- Từ hộp thoại, nhấp vào các biến môi trường, sau đó nhấp vào mới từ các 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ạnEnvironment Variables, then click on New from either System variables or User variables. The former applies to all users on your computer, while the latter affects just your current account
- 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 cho Node.js. Để đặt một giá trị khác, nhân số lượng bạn yêu cầu trong GB với 1024 [giá trị biến cần phải có tính bằng MB].Variable name field enter NODE_OPTIONS. In the Variable value field enter --max-old-space-size=4096. This value will allocate 4GB of virtual memory to Node.js. To set a different value, multiply the amount you require in GB by 1024 [the variable value needs
to be in MB].
- 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 bấm OK một lần nữa. Khởi động lại dự án của bạn cho các thay đổi để có hiệu lực.OK to save your changes, then click Apply and finally click OK once more. Restart your project for the changes to take effect.
Bạn cũng có thể đặt một biến môi trường thông qua thiết bị đầu cuối Windows PowerShell.
Khởi chạy một 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ăng bộ nhớ heap tạm thời, 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 NPM Run Dev hoặc tập lệnh của riêng bạn.npm run dev or your own script.
Hãy nhớ luôn để nhập kích thước bộ nhớ cần thiết tính bằng MB. Không làm như vậy có thể gây ra hành vi bất ngờ trong chương trình của bạn. Điều quan trọng là không phân bổ toàn bộ bộ nhớ có sẵn của bạn vì điều này có thể gây ra sự cố hệ thống đáng kể.
Cách sửa chữa JavaScript H đống ra khỏi lỗi bộ nhớ trên MacOS và Linux
Trên macOS và Linux, sửa chữa bộ nhớ heap rất giống nhau. Bạn nên xuất một biến môi trường chỉ định lượng bộ nhớ ảo được phân bổ cho Node.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 một lượng bộ nhớ khác nhau, hãy thay thế 4096 bằng số lượng cần thiết tính bằng MB.4096 with the required amount in 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ự để thiết lập biến đường dẫn của bạn.
Tránh JavaScript hết lỗi bộ nhớ
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ớ thích hợp là rất quan trọng khi viết các chương trình của bạn, đặc biệt là bằng ngôn ngữ cấp thấp.
Trong khi tăng bộ nhớ được phân bổ sẽ tạm thời khắc phục sự cố, bạn nên tìm nguyên nhân gốc và sửa nó.