제목에 명시된 바와 같이 AWS의 EC2 인스턴스에서 실행되는 NodeJS 애플리케이션이 있는데, 이 애플리케이션은 산발적으로 메모리가 부족하여 프로세스를 종료합니다.
비즈니스 측면에서는 중복 시스템이 다른 인스턴스를 스핀업하고 로드 밸런서를 통해 사용할 수 있도록 하기 때문에 실제로 방해가 되지 않습니다. 하지만 우리는 인스턴스의 메모리 부족을 일으키는 원인이 무엇인지 알아내어 이를 완전히 방지하고 싶습니다.
우리는 무슨 일이 일어나고 있는지 알아보기 위해 프로세스 종료와 관련된 로그를 조사했지만 사용 가능한 메모리가 없기 때문에 OS는 해당 시간 동안 로그를 작성할 수 없는 것으로 보입니다. 프로세스를 종료한 후 여러 로그가 억제되었음을 기록하고 정상적으로 계속됩니다. 따라서 로그 억제로 인해 문제의 실제 원인에 대한 추가 정보를 얻을 수 없다고 가정합니다.
이미 로그 억제를 해제하려고 시도했지만 프로세스가 응답하지 않는 동안에는 아무것도 기록하지 않습니다. 단, 지금은 억제된 로그 수를 보고하지 않습니다.
프로세스의 메모리 부족 원인이 무엇인지 어떻게 알 수 있나요?
답변1
프로세스를 종료합니다.
그만큼첫 번째당신이 해야 할 일은 메모리 부족을 멈추는 것입니다. 호스트의 오버커밋을 줄입니다.
(초기) 다음을 포함하는 /etc/sysctl.d에 새 파일을 추가합니다.
vm.overcommit_memory = 2
vm.overcommit_ratio = 15
그런 다음 실행합니다 sudo sysctl -p
(나중에 비율을 조정하고 싶을 수도 있음).
그런 다음 많은 메모리를 소비하는 항목을 찾기 시작할 수 있습니다.