Node 메모리 증가

poyal·2023년 2월 21일
1
post-thumbnail

사건발생

Nuxt SSR에서 메모리 누수

  • 위의 사건에 따라서 노드의 메모리를 변경하거나 줄여야하는 소요가 있었음.
  • 왜 특정 메모리 사이즈에서 재시작 되는지?

증상

  • 메모리가 4G 초과하게 되면
> NUXT_ENV_DEVALUE_LOG_LIMIT=-1 nuxt start

...

<--- Last few GCs --->

[39333:0x148008000]   166731 ms: Mark-sweep 4018.4 (4121.2) -> 4003.6 (4123.2) MB, 1444.9 / 0.1 ms  (average mu = 0.116, current mu = 0.021) allocation failure scavenge might not succeed
[39333:0x148008000]   168226 ms: Mark-sweep 4020.8 (4123.2) -> 4006.2 (4126.0) MB, 1461.9 / 0.0 ms  (average mu = 0.070, current mu = 0.022) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
...

이후에 NUXT가 재시작 된다.

원인

node 기본 메모리 힙사이즈

v12 미만에서 1.35GB
v14 미만에서 2GB
v14 부터는 4GB
  • 현행 사용버젼이 14버젼이라 4G에서 사망함...

해결

  • 기본 물리 메모리를 증가시킨다.
  • 그에 맞게 node 메모리 힙사이즈를 조정한다.
> node --max-old-space-size=2048 node_modules/nuxt/bin/nuxt.js start

...

<--- Last few GCs --->

[41634:0x130008000]    84180 ms: Mark-sweep 1996.0 (2071.2) -> 1981.2 (2073.8) MB, 640.6 / 0.0 ms  (average mu = 0.147, current mu = 0.058) allocation failure scavenge might not succeed
[41634:0x130008000]    84871 ms: Mark-sweep 1998.4 (2073.8) -> 1983.6 (2076.2) MB, 655.3 / 0.0 ms  (average mu = 0.101, current mu = 0.051) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
...

운영전략

  • 자동으로 메모리가 한계에 다다르는 것을 방지하거나 예측하는것을 node 단위에서 예측하거나 방지할수는 없다.
  • 상황에 맞게 node의 메모리 힙사이즈를 증감 시켜야 한다.
  • 부하가 예상되는 페이지에서는 SSR의 부하를 줄이기 위하여 필요정보만 제외하고 Client-Side에 위임한다.

0개의 댓글