-XX:+HeapDumpOnOutOfMemoryError
애플리케이션에서 메모리 부족 오류가 발생하면 힙 덤프를 얻기 위해 JVM 시작 옵션에 매개 변수를 JBoss 시작 스크립트에 추가 할 수 있다고 들었 습니다. 이 데이터가 어디서 덤프되는지 궁금합니다. 콘솔 또는 일부 로그 파일입니까? 콘솔에만 있다면 콘솔을 통해 Unix 서버에 로그인하지 않으면 어떻게됩니까?
-XX:+HeapDumpOnOutOfMemoryError
애플리케이션에서 메모리 부족 오류가 발생하면 힙 덤프를 얻기 위해 JVM 시작 옵션에 매개 변수를 JBoss 시작 스크립트에 추가 할 수 있다고 들었 습니다. 이 데이터가 어디서 덤프되는지 궁금합니다. 콘솔 또는 일부 로그 파일입니까? 콘솔에만 있다면 콘솔을 통해 Unix 서버에 로그인하지 않으면 어떻게됩니까?
답변:
오라클의 문서 는 다음과 같습니다 .
기본적으로 힙 덤프는 위의 예와 같이 VM의 작업 디렉토리에있는 java_ pid .hprof 파일에 작성됩니다 .
-XX:HeapDumpPath=
옵션으로 대체 파일 이름 또는 디렉토리를 지정할 수 있습니다 . 예를 들어-XX:HeapDumpPath=/disk2/dumps
힙 덤프가/disk2/dumps
디렉토리에 생성됩니다 .
HeapDumpPath
과 비슷한 것을 볼 "Unable to create /tmp/java_pidpid.hprof: File exists"
수 있습니다. 덤프 파일을 덤프 경로 밖으로 이동하여 향후 덤프 파일의 경로를 지우십시오. <pid>
파일 이름에 엔트로피를 높이기 위해 파일 이름에 자리 표시자를 사용 하십시오.
이 덤프는 UNIX 콘솔에서 볼 수 있습니다.
힙 덤프 경로는 언급 된 변수를 배치 한 직후 변수로 제공됩니다.
예 :
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"
언급 된 경로에서 콘솔의 덤프를 볼 수 있습니다.
"VM의 작업 디렉토리"가 무엇을 의미하는지 해독하기가 어렵다는 것을 알았습니다. 내 예제에서는 Java Service Wrapper 프로그램을 사용하여 jar를 실행했습니다. 덤프 파일은 래퍼 프로그램을 배치 한 디렉토리 (예 : c : \ myapp \ bin)에 작성되었습니다. 내가 이것을 발견 한 이유는 파일이 상당히 클 수 있고 위치를 발견하기 전에 하드 드라이브를 채웠기 때문입니다.
"-XX : HeapDumpPath"옵션을 사용하지 않는 경우 JBoss EAP / A의 경우 기본적으로 힙 덤프 파일이 "JBOSS_HOME / bin"디렉토리에 생성됩니다.