본문 바로가기

Error/Err_handling

Error [ nodeJS : FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory ]

 

에러 코드 : FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory  

 

 

상황 : backstopJS를 이용한 시각적 회귀테스트를 위해서 데이터를 엄청 불러오는 페이지를 약 300 페이지 정도를 지속적으로 요청

 

문제

에러가 뜨면서 종료

<--- Last few GCs --->

[33208:000001E1B68B9470] 16914535 ms: Scavenge 4082.3 (4118.5) -> 4080.7 (4126.7) MB, 2.9 / 0.0 ms  (average mu = 0.939, current mu = 0.851) task
[33208:000001E1B68B9470] 16914919 ms: Mark-sweep (reduce) 4092.5 (4134.5) -> 4086.3 (4119.5) MB, 31.5 / 0.0 ms  (+ 312.6 ms in 409 steps since start of marking, biggest step 43.4 ms, walltime since start of marking 384 ms) (average mu = 0.883, current mu

<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory       
 1: 00007FF6CE46B1EF v8::internal::CodeObjectRegistry::~CodeObjectRegistry+123599       
 2: 00007FF6CE3F8BA6 v8::internal::MicrotaskQueue::GetMicrotasksScopeDepth+65206        
 3: 00007FF6CE3F9C7D node::OnFatalError+301 
 4: 00007FF6CED2C20E v8::Isolate::ReportExternalAllocationLimitReached+94    
 5: 00007FF6CED167ED v8::SharedArrayBuffer::Externalize+781       
 6: 00007FF6CEBB9DCC v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1468
 7: 00007FF6CEBB6EE4 v8::internal::Heap::CollectGarbage+4244      
 8: 00007FF6CEBB4860 v8::internal::Heap::AllocateExternalBackingStore+2000   
 9: 00007FF6CEBD2570 v8::internal::FreeListManyCached::Reset+1408 
10: 00007FF6CEBD2C25 v8::internal::Factory::AllocateRaw+37        
11: 00007FF6CEBE4BCE v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawArray+46
12: 00007FF6CEBE780A v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller+74  
13: 00007FF6CEBE772D v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArray+77 
14: 00007FF6CEBD9EB8 v8::internal::Factory::NewJSArray+216        
15: 00007FF6CEAEE0FC v8::base::TimeDelta::operator!=+18284        
16: 00007FF6CEAF1FF0 v8::base::TimeDelta::operator!=+34400        
17: 00007FF6CEAF100A v8::base::TimeDelta::operator!=+30330        
18: 00007FF6CECC5F02 v8::internal::Builtins::code_handle+38434    
19: 00007FF6CECC6040 v8::internal::Builtins::code_handle+38752    
20: 00007FF6CEDB9FE1 v8::internal::SetupIsolateDelegate::SetupHeap+494641    
21: 00007FF6CED4C4AE v8::internal::SetupIsolateDelegate::SetupHeap+45310     
22: 00007FF6CED7C183 v8::internal::SetupIsolateDelegate::SetupHeap+241107    
23: 00007FF6CEE02732 v8::internal::SetupIsolateDelegate::SetupHeap+791426    
24: 00007FF6CED6E3BA v8::internal::SetupIsolateDelegate::SetupHeap+184330    
25: 00007FF6CED4A5BB v8::internal::SetupIsolateDelegate::SetupHeap+37387     
26: 00007FF6CEC2B00B v8::internal::Execution::CallWasm+1563       
27: 00007FF6CEC2B12B v8::internal::Execution::CallWasm+1851       
28: 00007FF6CEC2BBDA v8::internal::Execution::TryCall+378
orFor+1452045: 00007FFBD85E26AD BaseThreadInitThunk+29
46: 00007FFBD9C8A9F8 RtlUserThreadStart+40

 

문제 원인

2023-05-12 기준으로 Node.js(11.x 이상 버전에서)의 기본 heap size가 700MB ~ 1400MB여서 생긴 문제이다
(현재 node -v : v16.17.0)

내가 사용한 데이터양

해결방법

1. 더 큰 메모리 할당

2. 메모리 누수 개선

 

 

일단 당장은 더큰 메모리 할당으로 해결 하였고 차후 메모리 관리 방안 마련 해야겠다.

 

 

 

 

 

ref: