2016-06-07 2 views
1

OutOfMemoryExceptions을 throw하면 힙 덤프를 트리거 한 JVM 7에서 JBoss 4.2.1 애플리케이션이 실행 중입니다. 내가 힙 내 오세요 원인을 정확히 파악하는 덤프를 읽어하려고어떤 스레드가 OutOfMemoryException 힙 덤프를 트리거했는지

-Xms1498m -Xmx3000m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError 

: 나는 다음과 같은 스위치로 구성된 JVM 있습니다. 나는 많은 양의 메모리가 소비되는 것을보고 있지만 다소 기대된다. 내가 지금보고있는 것은 "흡연 총"입니다.

내 힙 덤프에 누락 된 메모리가 있다는 의미로 SO issue here을 이미 열었습니다. 따라서 OOME이 발생했을 때 JVM이 수행중인 작업을 파악하려고합니다.

어떤 스레드가 OOME을 트리거했는지 나타내는 힙 덤프가 있습니까? 더 구체적으로 내 OOME을 유발 한 호출이 무엇을하고 있었습니까? 나는 깨닫고 기억 누출의 경우, 이것은 잘못된 흔적을 뒤쫓아 가고 있을지도 모른다. 그러나 어떤 스레드가 예외를 일으켰는지 알기 위해보고있다.

이것을 사용하려면 MAT를 사용해야합니까?

답변

1

매트의 스레드 개요를 확인 했습니까? Thread Overview

OOME을 트리거 한 스레드는 알려주지 않지만 유지 된 힙에 대한 정보를 제공합니다.

+1

예 - 스레드 개요를 살펴 보았습니다. 감사. 그러나 어떤 스레드가 OOME을 트리거했는지는 알려주지 않습니다. 258 개의 스레드가 나열된 것을 감안할 때 각각의 스레드를 조사하여 각각의 작업을 확인하는 것은 매우 어렵습니다. Retained Heap size로 정렬 할 수는 있지만 가장 많은 메모리를 차지하고있는 스레드를 알려줍니다. 그것은 어떤 스레드가 내 JVM 충돌을 일으켰는지 알려주지 않습니다. –

+0

다음과 비슷한 것을 보시겠습니까
"main"스레드의 예외 : 스택 추적에서 java.lang.OutOfMemoryError? – SVashisth

+0

불행히도. 스택 추적 및 원인 (원인 : java.lang.OutOfMemoryError : Java 힙 공간)이 표시되지만 문제가되는 스레드 이름/번호는 표시되지 않습니다. –

1

실제로 어떤 스레드가 OOME을 발생시키는 지 신경 쓰지는 않습니다. 힙이 이미 거의 가득 찼을 때이 스레드가 심지어 작은 것을 생성하는 경우 누수가없는 간단한 작업을 수행하는 스레드에 대해 생각하십시오. Object 메모리 누수의 근본 원인이되지 않고 OOME이 발생할 수 있습니다.

Thread이 힙 덤프로 인해 OOME이 발생한 것을 알 수 없다고 생각되는 유일한 방법은 JVM이 스택 추적을 표준 출력으로 인쇄하므로 콘솔 또는 로그 파일을 확인하는 것입니다. OOME에 있습니다.

+0

위에서 언급했듯이 'OOME'에서'OOME '을 유발하는 스레드가 아무 것도 증명하지 못할 수도 있음을 알고 있습니다. 그러나, 여러 다른 덤프 상관 관계를 시도하고, 패턴 (예 : 거대한 메모리 블록을 할당하려고하는 스레드)을 볼 수 있으면 'OOME'이 원인으로 인해 내 초점을 좁힐 수 있습니다. 물론, 언급 한 바와 같이, 그 일과 관련이 없을 수도 있습니다. –

+0

도움이 될 수도 있습니다. http://stackoverflow.com/questions/37593549/java-heap-and-thread-analysis-for-memory-leak/37665594#37665594 –

관련 문제