요청이 무한대로 들어오면 어떻게 될까?
요청이 계속 들어오면 어떻게 되는지, 테스트 해보았다. 당연히 에러가 나는 것을 알았는데 어떤 에러인지는 추측이 안되었다.
<--- Last few GCs --->
[87018:0x102aba000] 60172 ms: Scavenge 1977.3 (1981.6) -> 1976.6 (1983.3) MB, 33.9 / 0.1 ms (average mu = 0.326, current mu = 0.328) allocation failure
[87018:0x102aba000] 60243 ms: Scavenge 1978.6 (1983.3) -> 1978.0 (1984.1) MB, 49.0 / 0.1 ms (average mu = 0.326, current mu = 0.328) allocation failure
[87018:0x102aba000] 60296 ms: Scavenge 1979.8 (1984.1) -> 1979.2 (1985.1) MB, 34.0 / 0.1 ms (average mu = 0.326, current mu = 0.328) allocation failure
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 0x10097cc39]
Security context: 0x33a8e46808d1 <JSObject>
1: test [0x33a8fe125669] [/Users/bugtype/Downloads/test.js:~6] [pc=0x2b1b882cbf10](this=0x33a87ce3ff49 <JSGlobal Object>)
2: _onTimeout [0x33a8da435b99] [/Users/bugrype/Downloads/test.js:26] [bytecode=0x33a87427b4e1 offset=5](this=0x33a8da435ab9 <Timeout map = 0x33a8fcfc2b99>)
3: listOnTimeout(aka listOnTimeout) [0x33a810340119] [internal/timers.js:549] [byteco...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0x1010285f9 node::Abort() (.cold.1) [/usr/local/bin/node]
2: 0x10008634d node::FatalError(char const*, char const*) [/usr/local/bin/node]
3: 0x10008648e node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
4: 0x100187c07 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
5: 0x100187ba7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
6: 0x100315955 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
7: 0x1003171ca v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/usr/local/bin/node]
8: 0x100313bfc v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
9: 0x1003119fe v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
10: 0x100310a41 v8::internal::Heap::HandleGCRequest() [/usr/local/bin/node]
11: 0x1002d5ce1 v8::internal::StackGuard::HandleInterrupts() [/usr/local/bin/node]
12: 0x10063de0c v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [/usr/local/bin/node]
13: 0x10097cc39 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/usr/local/bin/node]
실험 결과, 위와 같은 에러가 발생한다.
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
heap이 할당할 수 있는 영역이 넘었기 때문에 안된다는 에러이다. StackGuard 라는 것이 있구나
추가적으로 관련자료를 찾아보니, Event loop안에는 6개의 queue가 있는 것을 이전 챕터에서 설명하였다. 해당 queue는 동적으로 늘어나는데... 이게 최대치를 초과해서 그런거 같다.
Last updated
Was this helpful?