[java] .hprof 파일을 어떻게 분석합니까?

다음 플래그로 실행중인 프로덕션 서버가 있습니다.- XX : + HeapDumpOnOutOfMemoryError

지난 밤에 서버에 힙 오류가 발생했을 때 java-38942.hprof 파일이 생성되었습니다. 시스템 개발자는 플래그를 알고 있지만 유용한 정보를 얻을 수있는 방법이 없다는 것이 밝혀졌습니다.

어떤 아이디어?



답변

상당히 고급 도구를 사용하여 심각한 찌르기를 원한다면 Eclipse 의 Memory Analyzer 프로젝트 를보고 SAP가 제공 한 도구를 살펴보십시오 .

메모리 내 객체에 대해 제한된 SQL (OQL) 형식을 실행하는 것을 포함하여 메모리 누수 등을 찾는 데 매우 유용합니다.

com.yourcompany.somepackage.User에서 toString (firstName)을 선택하십시오.

정말 훌륭합니다.


답변

JDK와 함께 기본적으로 제공되는 Java 힙 분석 도구 인 JHAT 를 사용할 수 있습니다 . 명령 줄이지 만 메모리를 검사하는 데 사용하는 웹 서버 / 브라우저를 시작합니다. 가장 사용자에게 친숙하지는 않지만 최소한 이미 대부분의 장소에 설치되어 있습니다. 매우 유용한 관점은 맨 아래에있는 “힙 히스토그램”링크입니다.

전의: jhat -port 7401 -J-Xmx4G dump.hprof

jhat OQL “이 요일”도 실행할 수 있습니다 (하단 링크 “execute OQL”)


답변

Netbeans Profiler 또는 Visual VM 독립형 도구 에서 HeapWalker 를 사용할 수도 있습니다 . Visual VM은 독립형이기 때문에 JHAT의 좋은 대안이지만 JHAT보다 사용하기가 훨씬 쉽습니다.

Visual VM을 완전히 사용하려면 Java 6 이상이 필요합니다.


답변

Eclipse 메모리 분석기를 얻으십시오 . 더 나은 것은 없으며 무료입니다.

JHAT는 “장난감 응용 프로그램”에만 사용할 수 있습니다


답변

YourKit Java Profiler도 그것들을 처리하는 것 같습니다.


답변

힙 덤프에 대한 사용자 정의 분석을 수행하려는 경우 다음이 있습니다.

이 라이브러리는 빠르지 만 분석 코드를 Java로 작성해야합니다.

문서에서 :

  • 힙 덤프를 처리하기 위해 디스크에 임시 파일을 작성하지 않습니다
  • GZ 압축 힙 덤프를 직접 사용할 수 있습니다
  • 힙 경로 표기법

답변

개인적으로 VisualVM을 선호합니다. VisualVM에서 내가 좋아하는 기능 중 하나는 힙 덤프 비교입니다. 힙 덤프 분석을 수행 할 때 충돌의 원인을 파악하는 다양한 방법이 있습니다. 내가 찾은 유용한 방법 중 하나는 정상 및 비정상 힙 덤프를 비교하는 것입니다.

다음은 수행 할 수있는 단계입니다.

  1. OutOfMemoryError의 힙 덤프를 가져 오면 “oome.hprof”라고합니다. JVM 매개 변수 HeapDumpOnOutOfMemoryError를 통해이를 얻을 수 있습니다.
  2. 응용 프로그램에 따라 응용 프로그램을 다시 시작하여 큰 시간 (분 / 시간) 동안 실행하십시오. 응용 프로그램이 계속 실행되는 동안 다른 힙 덤프를 가져옵니다. “healthy.hprof”라고하겠습니다.
  3. VisualVM에서이 덤프를 모두 열고 힙 덤프 비교를 수행 할 수 있습니다. 수업이나 패키지 수준에서 할 수 있습니다. 이것은 종종 문제의 방향을 알려줄 수 있습니다.

링크 : https://visualvm.github.io