[node.js] node.js에 대한 올바른 “max-old-space-size”를 어떻게 결정합니까?

Node.js가 매개 변수를 기반으로 작동하는 방식을 이해하는 데 문제가 max-old-space-size있습니다.

예를 들어 제 경우에는 두 개의 t2.smallAWS 인스턴스 (2GB RAM)를 실행하고 있습니다.

이유는 모르겠지만 설정했습니다 max-old-space-size=4096(4GB). 이 경우 노드는 무엇을합니까? 이 구성으로 인해 메모리 할당 실패가 발생할 수 있습니까?

max-old-space-size서버 리소스 를 기반으로 올바른 값을 어떻게 결정 합니까?

내 응용 프로그램은 지속적으로 메모리 사용량을 증가시키고 있으며 노드 내부에 대한 모든 것을 이해하려고 노력하고 있습니다.



답변

“오래된 공간”은 V8의 관리 (가비지 수집) 힙 (즉, JavaScript 객체가있는 위치)에서 가장 크고 구성 가능한 섹션이며 --max-old-space-size플래그는 최대 크기를 제어합니다. 메모리 소비가 한계에 가까워지면 V8은 사용하지 않는 메모리를 해제하기 위해 가비지 콜렉션에 더 많은 시간을 소비합니다.

힙 메모리 소비 (예 : GC가 해제 할 수없는 라이브 개체)가 제한을 초과하면 V8은 프로세스를 중단 시키므로 (대안이 부족하여) 너무 낮게 설정하고 싶지 않습니다. 물론 너무 높게 설정하면 V8이 허용하는 추가 힙 사용으로 인해 전체 시스템의 메모리가 부족해질 수 있습니다 (대안이 부족하여 임의 프로세스를 스왑하거나 종료).

요약하면, 2GB의 메모리가있는 컴퓨터 --max-old-space-size에서는 다른 용도로 일부 메모리를 남겨두고 스와핑을 피하기 위해 약 1.5GB로 설정했을 것입니다 .


답변

2020 업데이트

이러한 옵션은 이제 노드에서 공식적으로 문서화됩니다 . 2GB 컴퓨터의 경우 다음을 사용해야합니다.

NODE_OPTIONS=--max-old-space-size=1536

사용할 양을 결정하려면을 사용 하여 Linux 시스템에서 사용 가능한 메모리를 확인할 수 있습니다 free -m. 참고이를 사용할 수 freebuffers/cache같은 메모리가 결합 buffers/cache폐기 할 수 있습니다 (이 버퍼 캐시 그렇지 않으면 사용하지 않는 메모리를 사용하는 것이 좋은 방법입니다).

또한 언급 된 공식 문서max-old-space-size 참고하십시오 .

2GB 메모리가있는 시스템에서는 1536 (1.5GB)으로 설정하는 것이 좋습니다.

따라서 위의 값입니다. 기본 OS에 필요한 메모리 양은 많이 변하지 않으므로 4GB 시스템 등에서 3.5를 행복하게 수행 할 수 있습니다.


답변

이 오류는 실행중인 응용 프로그램에 할당 된 메모리가 필요한 메모리보다 적을 때 발생합니다. 기본적으로 Node.js의 메모리 제한은 512MB입니다. 이 양을 늘리려면 메모리 제한 인수를 설정해야합니다 —-max-old-space-size. 메모리 제한 문제를 방지하는 데 도움이됩니다.

node --max-old-space-size=1024 index.js #increase to 1gb
node --max-old-space-size=2048 index.js #increase to 2gb
node --max-old-space-size=3072 index.js #increase to 3gb
node --max-old-space-size=4096 index.js #increase to 4gb
node --max-old-space-size=5120 index.js #increase to 5gb
node --max-old-space-size=6144 index.js #increase to 6gb
node --max-old-space-size=7168 index.js #increase to 7gb
node --max-old-space-size=8192 index.js #increase to 8gb

https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c


답변

작업중인 프로젝트에서 작동하도록하려면 다음 두 단계를 따르십시오.

  1. 프로젝트에서 node_module / @ angular cd node_module / @ angular

  2. 이제 아래 명령을 실행하십시오 export NODE_OPTIONS =-max-old-space-size = 8192


답변