JBoss의 힙 덤프에 HeapDumpOnOutOfMemoryError 매개 변수 사용


182

-XX:+HeapDumpOnOutOfMemoryError애플리케이션에서 메모리 부족 오류가 발생하면 힙 덤프를 얻기 위해 JVM 시작 옵션에 매개 변수를 JBoss 시작 스크립트에 추가 할 수 있다고 들었 습니다. 이 데이터가 어디서 덤프되는지 궁금합니다. 콘솔 또는 일부 로그 파일입니까? 콘솔에만 있다면 콘솔을 통해 Unix 서버에 로그인하지 않으면 어떻게됩니까?


1
그것은 현재 폴더입니다.
Valentin Tihomirov

답변:


246

오라클의 문서 는 다음과 같습니다 .

기본적으로 힙 덤프는 위의 예와 같이 VM의 작업 디렉토리에있는 java_ pid .hprof 파일에 작성됩니다 . -XX:HeapDumpPath=옵션으로 대체 파일 이름 또는 디렉토리를 지정할 수 있습니다 . 예를 들어 -XX:HeapDumpPath=/disk2/dumps 힙 덤프가 /disk2/dumps 디렉토리에 생성됩니다 .


16
여기에는 모든 VM 성능 관련 옵션이 나열되어 있습니다. java.sun.com/javase/technologies/hotspot/…
Ravi Gupta

4
중대한! HeapDump 플래그는 Java 1.5.0_07에서만 사용 가능합니다.
rustyx

14
또한 JVM이의 기존 힙 덤프를 덮어 쓰지 않음을 인식하는 것이 중요합니다 . 표준 출력 HeapDumpPath과 비슷한 것을 볼 "Unable to create /tmp/java_pidpid.hprof: File exists"수 있습니다. 덤프 파일을 덤프 경로 밖으로 이동하여 향후 덤프 파일의 경로를 지우십시오. <pid>파일 이름에 엔트로피를 높이기 위해 파일 이름에 자리 표시자를 사용 하십시오.

1
매우 유용했습니다. Eclipse Memory Analyzer로 누출을 발견하는 데 몇 분이 걸렸습니다.
Aron Lorincz 2016 년

시스템에 존재하지 않는 폴더 경로를 지정하면 어떻게됩니까? 폴더를 만들고 해당 폴더 내에 혹 덤프를 밀어 넣습니까?
Vinit89

47

이 덤프는 UNIX 콘솔에서 볼 수 있습니다.

힙 덤프 경로는 언급 된 변수를 배치 한 직후 변수로 제공됩니다.

예 :

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

언급 된 경로에서 콘솔의 덤프를 볼 수 있습니다.


4

"VM의 작업 디렉토리"가 무엇을 의미하는지 해독하기가 어렵다는 것을 알았습니다. 내 예제에서는 Java Service Wrapper 프로그램을 사용하여 jar를 실행했습니다. 덤프 파일은 래퍼 프로그램을 배치 한 디렉토리 (예 : c : \ myapp \ bin)에 작성되었습니다. 내가 이것을 발견 한 이유는 파일이 상당히 클 수 있고 위치를 발견하기 전에 하드 드라이브를 채웠기 때문입니다.


작업 디렉토리는 pwdx <PID> 명령을 통해 찾을 수 있습니다. 먼저 ps -ef | grep java, Java 앱의 PID를 찾은 다음 pwdx <PID>를 실행하십시오. 작업 디렉토리를 알려줍니다.
RCG December

2

"-XX : HeapDumpPath"옵션을 사용하지 않는 경우 JBoss EAP / A의 경우 기본적으로 힙 덤프 파일이 "JBOSS_HOME / bin"디렉토리에 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.