java 8, 11 버전 jar 배포 옵션

morningstar·2021년 3월 14일
0

Back

목록 보기
1/8

슈랭크 api 서버를 개발했고
AWS에서 제공하는 ec2에서 접속을 끊었을 때에도 백그라운드에서 동작할 수 있도록

nohup java -jar ssurank.jar &

명령어로 jar 파일을 실행했다.

실제로 많은 사용자들이 슈랭크 서비스를 이용했는데
갑자기 서버에 장애가 생겨서 서비스 제공이 불가능해졌다.
jar 파일을 nohup 명령어로 실행하면 nohup.out 파일에 기록이 남는데
마지막 로그를 확인했을 때 아래 그림과 같이 나왔다.

"Thread Starvation or clock leap detected ~~~"



우선 ec2를 재기동하여 api 서버를 복구했고
이런 문제가 다시 발생하면 원인을 파악할 수 있도록 heapdump와 gc 명령어를 추가했다.

HeapDump

nohup java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ssurank.hprof -jar ssurank.jar &

이 명령어를 실행하면 MemoryLeak이 발생하여 서버가 다운됐을 때
ssurank.hprof(HeapDump 파일)가 생성된다.

GC

nohup java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log -XX:+UseGCLogFileRotation -XX:GcLogFileSize=50m -X:NumberOfGCLogFiles=100

이 명령어를 실행하면 GC에 관한 로그 파일이 생성된다.




GC 로그 명령어는 JDK 8버전과 11버전에서 차이가 있다. 이를 정리하면

jdk 8버전용

nohup java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=20m -XX:NumberOfGCLogFiles=100 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ssurank.hprof -jar ssurank.jar &


jdk 11버전용

nohup java -verbose:gc -XX:+PrintGCDetails -Xlog:gc*:file=./ssurank_gc.log,filecount=5,filesize=5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ssurank.hprof -jar ssurank.jar &

profile
오늘 달리면 내일 걸을 수 있다!

0개의 댓글