2018. 8. 12. 19:01ㆍIT/SW
JVM 크래시 - java core dump의 원인 및 해결방법
JVM 크래시 - java core dump의 원인 및 해결방법
최근 JVM을 이용하여 서버성능 측정을 진행 중
갑자기 JAVA를 이용한 서버 AP가 core dump(hs_err_pid)를 떨어트리며 죽는 경우가 발생했다.
(jdk 7.0_05_b05 버전 사용 중)
core dump 분석 결과 JVM 크래시가 문제였는데, 이에 대한 해결방법을 공유한다.
먼저 core dump(hs_err_pid)를 열어보면 제일 상단에 THREAD정보가 나오는데
여기서 core dump 생성 시 JVM이 촉발 시켰음을 알 수 있다.
아래 Heap영역 중 Eden은 JVM에서 생성한지 얼마 안된 객체가 저장되는데,
이 부분이 100%라고 해서 문제가 된 것은 아니며 절대 메모리나 CPU자원이 많이 사용해서 떨어지는 core dump가 아니다.
jdk 1.6.x와 1.7.x에서 JVM 크래시 버그가 발생하는데 원인은 다음과 같다.
JAVA는 GC(가비지 컬렉션) 수행 중 쓰레기로 판단된 쓰레드에 marking을 진행하는데 이때 걸리는 시간이 오래 걸리면서 나타나는 현상이다.
즉, 쓰레기로 판단된 쓰레드를 반환하면서 메모리에 공간단편화가 진행 될 때 버그가 발생하다.
이를 해결하기 위해서는 두 가지 방법이 있다.
1. 안정된 JVM 버전(6.0_14 이하)으로 다운그레이드
2. JAVA 실행 옵션에 -XX:-ReduceInitialCardMarks 추가
실제로, 두 가지 방법을 적용해 해결된 사례가 있다고 한다.
Oracle이 JAVA를 인수한 이후 예상했던 대로 이제 라이센스 비용을 받는다고 한다.
과연, JVM 크래시 버그가 해결된 상위 버전이 그에 해당될지 궁금해진다.
'IT > SW' 카테고리의 다른 글
타이젠 스튜디오 설치 (0) | 2020.12.20 |
---|---|
버그란 무엇인가 - 버그에 대한 고찰 (0) | 2019.03.01 |
Spring Integration 정리 (0) | 2018.08.05 |
Apache Camel 정리 (0) | 2018.08.05 |