To Dare Is To Do!
EC2 인스턴스 메모리 모니터링 본문
내가 사용하는 ec2 인스턴스의 메모리는 프리티어로서 상당히 제한적인 용량을 가지고 있다.
이러한 환경 속에서 효율적으로 프로젝트를 진행하고 위해 메모리 설정을 해보려고 한다.
설정을 진행하기 전 서버의 메모리 용량 및 현재 사용되고 있는 사용량을 한번 살펴본다.
ubuntu 서버의 메모리 사용량 조회
메모리의 사용량을 확인하고 싶은 경우 "top"명령어를 입력하여 간단하게 확인할 수 있다.
현재 동작중인 프로세스들의 목록과 해당 프로세스의 CPU와 메모리 사용을 보여준다.
현재 해당 서버에는 Spring boot 프로젝트가 올라가 있고 성능 테스트 진행 시에는 서버 자원의 모니터링을 위한 Jmeter agent가 메모리에 올라가 작동한다.
각각이 사용하는 메모리를 확인해 보자
spring 프로젝트가 사용하고 있는 메모리 사용량
해당 spring 애플리케이션은 전체 메모리의 34.5% 정도를 사용하고 있다.
JMeter agent 메모리 사용량
성능 테스트를 위해 agent를 실행하면 기본적으로 전체 메모리의 4.9% 정도를 사용하는 것을 확인할 수 있다.
적절한 Java Heap 메모리 size 지정
JAVA default Heap size 확인
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
MinHeapSize: 8,388,608 바이트 (8 MB)
JVM이 사용할 수 있는 최소 힙 크기
MaxHeapSize: 249,561,088 바이트 (약 238 MB)
JVM에서 사용할 수 있는 최대 힙 크기
JVM의 힙 메모리의 크기가 너무 작으면
- JVM이 필요한만큼의 메모리를 초기에 확보하지 못하여 실행중 메모리 해제와 할당을 반복하여 오버헤드가 발생
- GC가 자주 발생하여 애플리케이션의 성능 저하
- OutOfMemoryError 발생으로 비정상적인 종료 or 성능 저하
JVM의 힙 메모리의 크기가 너무 크면
- 시스템 메모리의 낭비
=> 시스템 메모리 부족으로 다은 프로세스에 영향을 미침
- 긴 GC 주기와 GC 시간 증가
현재 사용 가능한 메모리는 대략 356MB으로 최대 힙 메모리는 70% 수준인 256MB 최소 힙 메모리는 128MB로 설정하여
위의 문제들을 최소화하려고 한다.
github action을 통해 배포할 때 자동으로 해당 메모리 값을 설정하도록 했다.
'프로젝트' 카테고리의 다른 글
Nginx (0) | 2024.08.09 |
---|---|
코드 테스트 (0) | 2024.08.01 |
좋아요 기능, 어떻게 설계해야 할까? (0) | 2024.07.29 |
JMeter를 활용한 성능 테스트(1) (0) | 2024.07.28 |
성능테스트의 중요성 (0) | 2024.07.27 |