網站搜尋

javascript - 致命錯誤:接近堆限制時標記壓縮無效


我遇到這個錯誤。有人能給我一個小的解釋嗎?我甚至不知道我需要修復什麼。

我在 TypeScript 編譯期間收到這個錯誤。


<--- Last few GCs --->

[1791:0x5533880]    72626 ms: Scavenge (reduce) 2042.8 (2082.2) -> 2042.1 (2082.5) MB, 10.0 / 0.0 ms  (average mu = 0.287, current mu = 0.243) allocation failure 
[1791:0x5533880]    74247 ms: Mark-sweep (reduce) 2043.0 (2082.5) -> 2037.5 (2082.5) MB, 1617.4 / 0.0 ms  (average mu = 0.225, current mu = 0.159) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0xb09c10 node::Abort() [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 2: 0xa1c193 node::FatalError(char const*, char const*) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 3: 0xcf8dbe v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 4: 0xcf9137 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 5: 0xeb09d5  [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 6: 0xeb14b6  [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 7: 0xebf9de  [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 8: 0xec0420 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
 9: 0xec339e v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
10: 0xe848da v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
11: 0x11fd626 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]
12: 0x15f2099  [/opt/hostedtoolcache/node/16.15.0/x64/bin/node]

Node.js : 16.15.0 TypeScript : 4.2.4

答案#1

您的記憶體使用量約為2GB,垃圾回收器儘管努力,仍無法釋放任何記憶體。某些分配請求需要的記憶體超過剩餘可用量,因此崩潰是處理這種情況的唯一選擇。

解決方案 1:使用較少的記憶體。細節取決於您的應用程式:

  • 也許你有可以清除或縮小的快取
  • 也許你可以對較小的數據塊進行操作,或者處理較少的並發請求
  • 也許你可以找到更節省記憶體的方法來表示你正在處理的數據
  • 也許你的程式碼有記憶體洩漏(即無意中保留了實際上不再需要的物件),你可以找到並修復它們
  • 可能還有其他大約十二種可能性。

解決方案 2:允許 Node 使用更多記憶體,方法是使用 --max-old-space-size=3000(或其他大於當前/預設限制的值;該值以兆字節為單位)。