Elastic Search 다이어트해라

바람찬허파·2025년 8월 4일

(1) 문제 상황

검색 기능을 위해 EC2를 분리하여, elastic search 를 통해 검색 결과를 리턴하기로 하였다.
docker를 통해 elastic search와 flask server를 ec2에 업로드할 생각이었다.

하지만 es 컨테이너가 바로 죽는 것을 확인하였다.
에러 메시지는

ERROR: Elasticsearch died while starting up, with exit code 137

(2) 원인 분석

Common Causes:
Insufficient Memory Allocation:
Elasticsearch requires a significant amount of memory, especially for its JVM heap. If the allocated memory to the Elasticsearch process or its container is too low, it can lead to OOM errors and termination.

결국 es를 실행하기에는 메모리가 부족하다는 결론이다.
난 이제 처음으로 ec2에 컨테이너를 올리기만 했는데...

GPT 역시 t2.micro 스펙의 ec2로 띄울 수 없다고 단호히 말했다.

(3) 해결 과정

(3)-1 ES_JAVA_OPS 설정

OOM 현상을 해결하기 위해, docker-compose 내 es_java_ops를 설정하였다.

Elasticsearch는 내부적으로 Java 애플리케이션이라 메모리 사용량, GC 동작, 힙 크기 등을 Java 옵션으로 조절하는데, 그걸 Docker 컨테이너 환경에서 설정할 수 있도록 만든 변수이다.

// docker-compose.yml
ES_JAVA_OPTS=-Xms512m -Xmx512m

다음 옵션의 의미는, 컨테이너를 실행할 때
-Xms512m: JVM이 최소 사용할 힙 메모리를 512MB로 설정
-Xmx512m: JVM이 최대 사용할 힙 메모리를 512MB로 제한하여
Elasticsearch가 메모리 부족으로 터지지 않도록, 실행 시 할당받을 힙 메모리 양을 직접 조절하는 것이다.

(3)-2 SWAP Memory 설정

(3)-3 Docker 컨테이너 실행 확인

swap 메모리 설정 후 다시 컨테이너를 실행하자, 죽지 않고 실행 중인 것을 볼 수 있다.

0개의 댓글