에러 코드 : 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: