Java 기반으로 실행되는 Application의 경우 실행 시 Java Option을 추가하여 다양한 기능들을 추가할 수 있다.
이전 회사에서 한동안 Java 기반으로 개발되는 Application이 많았기 때문에 제품 성격에 따라 다양한 option들을 추가하여 사용했었는데, 그 당시 사용했던 옵션을 정리 및 소개하고자 한다.
(1) GC 로그 출력 옵션
-Xloggc:/tmp/gc_$(date '+%Y%m%d%H%M%S').log -verbose:gc -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=15 -XX:GCLogFileSize=10m
위 옵션 사용 시, /tmp/ 폴더 하위에 GC 로그가 최초 실행 시간을 포함하여 로그가 출력되며, 최대 갯수 15개(1개 최대 사이즈는 10m)를 유지하며 rotate 하게 됩니다. 로그 안에 Date, Time 등의 값을 GC 내용과 함께 출력하기 위한 옵션들도 포함되어 있다.
(2) Memory Dump 출력 옵션
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump_$(date '+%Y%m%d%H%M%S')
만약 GC로 해결되지 않고 Application에 메모리 릭(leak)이 있는 경우, 메모리가 계속 증가하다 더이상 메모리를 alloc 할 수 없는 상황에 도달하게 되면 비정상 종료하게 된다. 실제 서비스 환경에서 이런 상황이 발생하게 되면 이미 프로세스가 종료된 상태이므로 원인 분석을 하기 어려운 경우가 있는데, 그런 상황을 대비하여 비정상 종료되는 시점에 메모리 정보를 그대로 파일로 출력하고 죽을 수 있도록 위와 같은 옵션을 추가할 수 있다. 만약 특정 Application에 메모리 릭이 의심된다면 위 옵션을 추가한 후 성능 또는 에이징 테스트를 돌린 후, 메모리에 어떤 데이터들이 삭제되지 않고 누적되는지 추적이 가능하다.
(3) 그 외.. 실제 사용했던 Java option..
java -jar -Xms8g -Xmx8g -XX:+UseLargePagesInMetaspace -XX:G1ConcRefinementThreads=8 -XX:MaxGCPauseMillis=20 -XX:ParallelGCThreads=8 -Xloggc:/tmp/gc_$(date '+%Y%m%d%H%M%S').log -verbose:gc -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=15 -XX:GCLogFileSize=10m -XX:+UseG1GC OOOO.jar
당시 G1GC를 주로 사용하였고, 성능에 민감한 Backend Server 프로그램이었기 때문에 GC Thread 및 Pause 시간에 대한 옵션들도 성능 요구치와 서비스 시나리오에 따라 조절해가며 사용하였었다. 위 옵션에 필요한 옵션은 더 추가하고, 불필요한 옵션은 제거하며 응용이 가능하다.
'Engineering > Script, Coding' 카테고리의 다른 글
python, flask, json : request body에 포함된 데이터를 response body에 활용하기 (0) | 2022.04.17 |
---|---|
Golang : 프로그래밍 환경 구성 및 Hello World 출력하기 (0) | 2022.02.02 |
flask : boto3 활용하여 AWS S3에 file upload URL(presigned_post) 응답주는 web server 구현하기 (0) | 2021.09.03 |
댓글