2013-03-03 2 views
2

-XX:+HeapDumpOnOutOfMemoryError은 OutOfMemoryError에서 힙 덤프를 사용 가능하게합니다.Out of Memory 오류시 스레드 덤프를 수행하는 방법

스레드 덤프와 비슷한 항목이 있습니까? 서버에서 오류가 발생하는 경우이 필요합니다 - 발생했을 때 자체 처리 할 수있는 액세스 권한이 없습니다

+0

VisualVM을 사용하여 힙 덤프를 수행 할 수 있습니다. 최신 Java 버전에는 보드에 bin/폴더가 있습니다. –

+0

Unix에서 SIGQUIT (kill 명령과 함께 보내거나 프로그램의 콘솔에 Ctrl- \를 입력했는지 여부)는 모든 스레드의 스택 추적을 덤프합니다. Windows에서는 프로그램 콘솔의 Ctrl-Break가이를 수행합니다. – VGR

답변

2

OutOfMemoryError가 발생하는 정확한 실행 지점은 매우 다양합니다 (단일 스레드 응용 프로그램이없는 경우) , 그래서 나는 OOM에서 쓰레드 덤프를 얻는 것이 너무 많은 의미가 있다고 생각하지 않는다. 적어도 Java 힙 공간 인 OOM 일 경우에는 사실이지만 다른 종류의 OOM 오류 일 수도 있습니다.

어쨌든 동일한 질문을 다루는 this older post을 살펴보십시오.

그러나 OOM 오류를 해결하는 더 좋은 방법은 Eclipse Memory Analyzer Tool을 사용하여 힙 덤프를 검사하는 것입니다. 객체 그래프를 소위 dominator tree으로 변환하여 메모리 누출을 식별하는 데 도움이됩니다. 이 구조는 객체 들간의 keep-alive 의존성을 보여주기 때문에 가장 큰 메모리 덩어리를 유지할 책임이있는 객체를 쉽게 식별 할 수 있습니다 (Shallow vs. Retained Heap 참조).

+0

링크를 제공해 주셔서 감사합니다. 우리는 서비스 래퍼를 사용하고 있으며이를위한 구성 설정을 발견했습니다. 그렇지 않으면 예외 처리기 솔루션으로 갈 것입니다. –

+0

위의 "오래된 게시물"은 다음을 제안합니다 : -XX : OnOutOfMemoryError = "kill -3 % p" – vorburger