JVM 크래시 - java core dump의 원인 및 해결방법

2018. 8. 12. 19:01IT/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