일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- 자바백엔드
- 플러터
- FLAB
- EC2
- redis
- nGrinder
- github
- 에프랩
- 트러블슈팅
- 로드밸런서
- F-Lab
- 알고리즘
- grafana
- AWS
- 후기
- backend
- 성능테스트
- MySQL
- java
- Spring
- 데이터구조
- 부트캠프
- 멘토링
- 도커
- 레디스
- 백엔드
- Flutter
- error
- 코딩테스트
- Today
- Total
민스씨의 일취일장
성능 테스트 | 컨테이너 메모리 제한 설정 본문
컨테이너 구동 시 메모리 제한 설정에 대한 글로, Github Issue-#12의 일부 내용입니다.
컨테이너 메모리 제한 설정
성능 테스트에 진행하기 앞서, 컨테이너의 환경을 되도록 일정하게 유지할 필요가 있다. 즉, 변인을 통제하기 위해 서비스 컨테이너의 메모리를 고정(제한) 해보려고 한다.
제한 방법
지금 적용해보려 하는 방법은 두 가지이다.
- JVM Heap 메모리 제한
- 컨테이너 메모리 제한
JVM Heap 메모리 제한
자바 애플리케이션 수준에서 제한해 볼 수 있는 것이 JVM Heap 메모리이다. Heap 메모리는 프로그램이 구동 중에 사용되고 프로그램 작동에 영향을 미치는 GC의 대상이기 때문에, Heap 메모리 크기를 일정하게 제한을 두는 것만으로도 유의미한 추세를 파악할 수 있을 것으로 기대된다.
- 제한 방법
도커 파일에서 환경 변수로 설정할 것이다.
ENV JAVA_OPTS="-Xms256m -Xmx512m"
Xms는 초기 힙 메모리 크기이고, Xmx는 최대 힙 메모리 크기이다. 위에서는 초기 힙 메모리를 256MG로, 최대 힙 메모리를 512MG로 설정한 것이다.
컨테이너 메모리 제한
이후 한 번 더 고려해 볼 만한 메모리 제한은 컨테이너의 메모리 제한이다. 힙 메모리 외의 메모리(컨테이너 메모리) 공간도 성능에 직간접적으로 영향을 주기 때문에 컨테이너 메모리도 제한을 할 것이다.
-m 768m --memory-swap 768m
컨테이너 실행 시 위의 옵션을 추가해주면서 컨테이너 메모리를 제한할 수 있다. -m은 컨테이너가 사용할 메모리를 세팅한 것이고, --memory-swap은 추가로 최대 사용가능한 메모리 크기이다. swap을 설정하지 않으면 기본 설정된 메모리의 2배까지 사용가능해진다.
제한 내용 확인
Heap Memory 영역
JVM Heap 메모리 영역은 Grafana jvm_memory_used_bytes 항목으로 확인할 수 있다. 기존 도커 컨테이너를 멈추고, 다시 실행하는 사이 측정이 멈춰있고 다시 그래프가 시작된 것을 확인할 수 있다. 그리고 파란줄이 낮아진 것을 확인할 수 있다.
Docker Container 메모리 영역
도커 컨테이너가 구동되고 있는 서버(EC2)에 SSH 접속해 아래와 같은 명령어를 입력한다.
docker inspect <container-id> | grep Memory
이에대한 결과로 아래와 같은 결과를 얻었다.
805306368MB를 사용중이라고 나와있다. 실제로 768MB = 768 * 1024 * 1024 =805,306,368 Byte로 정확하게 설정한대로 반영된 모습이다.
'Projects > MetaPay' 카테고리의 다른 글
nGrinder | 동시성 시나리오 만들기 (0) | 2024.08.17 |
---|---|
Grafana | 성능 테스트 | 모니터링 | 필요한 지표들 선정한 뒤 그라파나 대시보드 생성하기 (0) | 2024.08.16 |
TIssue | EC2 내 컨테이너에서 로컬 PC로의 요청이 전달되지 않는 이슈 (feat. Public IP vs. Private IP) (0) | 2024.08.14 |
TIssue | Nginx | EC2 | 도커 컨테이너로 띄운 로드밸런서가 하나의 서버만 연결하는 이슈 (0) | 2024.08.14 |
VisualVM | Java 애플리케이션의 모니터링 도구 with Docker (0) | 2024.08.07 |