스프링 - ECS JVM 힙 메모리 증가시키기

2025. 4. 6. 23:41· Spring
목차
  1. 발생한 문제
  2. 로그
  3. 해결 방법
  4. 현재 ECS Task Definition
  5. Spring Boot Actuator를 통한 JVM 메모리 확인
  6. 왜 Max heap 메모리가 235.21MB인가?
  7. Dockerfile 수정
  8. 조정 이후의 JVM 메모리 확인

스프링 - ECS JVM 힙 메모리 증가시키기

 

작성일자 : 2025년 04월 06일


 

(이미지)

 

발생한 문제

 

AWS ECS에서 Spring Boot 애플리케이션을 실행할 때, JVM 힙 메모리가 부족하여 애플리케이션이 비정상 종료되는 문제가 발생했습니다.

 


 

로그

Exception in thread "http-nio-8080-Acceptor" java.lang.OutOfMemoryError: Java heap space

 


 

 

해결 방법

 

현재 ECS Task Definition

 

ECS Task Definition은 아래와 같이 설정되어 있습니다.

 

Task Size

  • CPU: 0.9vCPU
  • Memory: 0.9GB

Container - Resource allocation limits

  • CPU: 0.9vCPU
  • Memory hard limit: 0.9GB
  • Memory soft limit: 0.7GB

 


 

Spring Boot Actuator를 통한 JVM 메모리 확인

 

Spring Boot Actuator를 사용하여 JVM 메모리를 확인할 수 있습니다.

 

Actuator의 /actuator/metrics/jvm.memory.used, /actuator/metrics/jvm.memory.max 엔드포인트를 통해 현재 JVM 메모리 사용량을 확인하였습니다:

 

Current Memory Usage

  • Used total: 395.91MB
  • Used heap: 153.62MB
  • Used nonheap: 249.12MB

Max Memory Limits

  • Max total: 1.56GB
  • Max heap: 235.21MB
  • Max nonheap: 1.33GB

 


 

왜 Max heap 메모리가 235.21MB인가?

 

JVM의 기본 힙 메모리 설정은 -Xms와 -Xmx 옵션을 통해 조정할 수 있습니다.

 

다만, Java 10부터는 -XX+UseContainerSupport 옵션이 기본값으로 설정되어 있으며, Java 8u191 버전에도 백포팅 되었습니다. 이를 이용하면 JVM이 호스트 머신의 물리적 메모리를 사용하는 대신 컨테이너 메모리 제한을 감지하고 이를 기반으로 힙 메모리를 설정합니다.

 

최대 힙 메모리 퍼센트는 -XX:MaxRAMPercentage 옵션을 통해 조정할 수 있습니다. 기본값은 25%입니다.

 

즉, 컨테이너의 메모리 제한이 0.9GB인 경우, 최대 힙 메모리는 약 0.225GB(=0.9GB * 25%)로 설정되며, 위에서 확인한 것처럼 235.21MB와 일치합니다.

 


 

Dockerfile 수정

 

-XX:MaxRAMPercentage 옵션을 50%로 설정하여 최대 힙 메모리를 50%로 조정하였습니다.

 

FROM amazoncorretto:17-al2023
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-XX:MaxRAMPercentage=50.0","-jar","/app.jar"]

 


 

조정 이후의 JVM 메모리 확인

 

Dockerfile 수정 후, Spring Boot Actuator를 통해 JVM 메모리를 다시 확인하였습니다.

 

Current Memory Usage

  • Used total: 450.65MB
  • Used heap: 169.95MB
  • Used nonheap: 243.16MB

Max Memory Limits

  • Max total: 1.79GB
  • Max heap: 468.32MB
  • Max nonheap: 1.33GB

 

Max heap 메모리가 468.32MB로 증가한 것을 확인할 수 있습니다.

저작자표시 (새창열림)
  1. 발생한 문제
  2. 로그
  3. 해결 방법
  4. 현재 ECS Task Definition
  5. Spring Boot Actuator를 통한 JVM 메모리 확인
  6. 왜 Max heap 메모리가 235.21MB인가?
  7. Dockerfile 수정
  8. 조정 이후의 JVM 메모리 확인
'Spring' 카테고리의 다른 글
  • 스프링 - Quartz Postgresql JDBC 연결하기
  • 스프링 - Flyway BeanCreationException 해결 방법
  • ShadcnUI - Drawer 또는 Dialog 위의 sonner 클릭 안되는 문제 해결하기
  • 스프링 - PostgreSQL text[] 타입을 엔티티의 List<String> 필드에 매핑하기
gerrymandering
gerrymandering
gerrymandering
gerrymandering
gerrymandering
전체
오늘
어제
  • 분류 전체보기 (80) N
    • SOLID 원칙 (6)
    • 번역 (4)
    • Nginx (1)
    • Tailwind CSS (1)
    • AWS (7)
      • DMS를 사용한 RDS to OpenSearch .. (3)
      • ECS를 이용한 Blue-Green 무중단 배포 .. (7)
    • NextJS (5) N
    • 기타 (11)
    • Prompt Engineering (6)
    • 읽어볼만한 글 (3)
      • 기술 (0)
      • 쓸만한 툴 (0)
      • 아이템 (0)
      • 웹 디자인 (0)
      • 기타 (3)
    • Cloud Architecture (4)
    • Trouble Shooting (9)
    • Spring (11)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

글쓰기 / 관리자
hELLO · Designed By 정상우.v4.2.1
gerrymandering
스프링 - ECS JVM 힙 메모리 증가시키기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.