먼저 가비지 수집 없이 Java 5에서 힙 덤프를 수행하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/1268336

문제

우리는 Java 5를 실행하는 장기 실행 서버 애플리케이션을 보유하고 있으며 이를 프로파일링하면 시간이 지남에 따라 이전 세대가 천천히 성장하는 것을 볼 수 있습니다.전체 GC에서는 올바르게 해제되었지만 힙 덤프를 사용하여 Eclipse MAT에서 연결할 수 없는 개체를 볼 수 있었으면 좋겠습니다.+XX:HeapDumpOnCtrlBreak를 사용하여 힙 덤프를 성공적으로 얻었지만 JVM은 힙을 덤프하기 전에 항상 GC를 수행합니다.분명히 이것은 Java 6에서는 발생하지 않지만 지금은 5에서 멈춰 있습니다.이를 방지할 수 있는 방법이 있나요?

도움이 되었습니까?

해결책

나는 다음과 같은 3 자 프로파일 러를 제안합니다 Yourkit,이를 통해 먼저 GC를 시작하지 않고도 스냅 샷을 찍을 수 있습니다. 추가 보너스, 전체 CTRL 브레이크 Shenanigans없이 스냅 샷을 찍을 수 있습니다.

다른 팁

JCONSOLE 또는 VOLICEVM 또는 JMC 또는 ... 기타 JMX 관리 콘솔을 사용하십시오. com.sun.management에서 HotSpotDiagnostic을 엽니 다. 방법을 선택하십시오 덤프 그리고 두 매개 변수를 입력합니다.

  • 덤프 파일의 경로
  • (true/false) 덤프 라이브 객체 만 덤프합니다. 사용 false 모든 개체를 버리기 위해.

덤프 파일은 jvisualVM이 아닌 JVM에 의해 작성되므로 JVM이 다른 시스템에서 실행중인 경우 해당 시스템에 기록됩니다.

enter image description here

JDK와 함께 제공되는 표준 jmap 도구를 사용해 보셨나요?jmap 통행료는 Java 5에서 공식적으로 도입되었습니다.

명령줄 예시:/java/bin/jmap -힙:형식=b

결과는 표준 jhat 도구나 MAT와 같은 GUI 응용 프로그램을 사용하여 처리할 수 있습니다.

여기에 JMX를 통해 힙 덤프를 프로그래밍 방식으로 가져갈 수있는 코드가 있습니다.

링크: jmxHeapDumper.java

소스 코드의 주석에는 힙 덤프를 취하는 방법에 대한 유용한 정보가 포함 된 기사에 대한 2 개의 링크가 포함되어 있습니다. 나는 확실하지 않지만 운이 좋으면 아마도 JMX 접근 방식은 GC를 피할 수있는 방법을 가질 것입니다. 도움이 되었기를 바랍니다 !

JPROFILER (EJ-Technologies)이 작업을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top