2009-11-30 2 views
12

응용 프로그램 내에서 힙 덤프 을 요청하는 방법이 필요합니다.응용 프로그램 내에서 Java 힙 덤프 (코어 덤프)를 요청하십시오.

이론적 근거 : 특정 오류 조건이 발생하면 힙을 덤프하여 메모리가 보유하고있는 것을 볼 수 있습니다.

그러나이 작업을 자동화하고 싶습니다 (예를 들어, 특정 조건이 발생했거나 더 이상 핑을 가져 오지 않을 때). 일부 테스트가 실패하면이 작업을 자동화 할 수 있습니다. 따라서 응용 프로그램 내에서 힙을 덤프 할 방법이 필요합니다. 나는 MX 콩 물건으로 그것을 찾는 것처럼 보일 수 없다. MX Beans는 모니터와 "ownable synchronizer"정보, 교착 상태 및 경합 정보로 아주 멋진 스택 추적을 제공 할 수 있지만 힙 덤프를 요청하는 방법을 찾지 못하는 것 같습니다. 그런 방법이 있습니까? 또는 몇 가지 간접적 인 방법으로, 예를 들어 이러한 JVisualVM이하는 일은 어떻게됩니까? 그리고 JVM에게 OutOfMemoryExceptions ..에 코어를 덤프하도록 말할 수 있습니다.

답변

16

dump heap on OutOfMemoryError이면 충분하지 않은 경우 programmatically dumping heap from Java applications의 HotSpot에 의존적 인 방법이 있습니다.

+0

굉장, 내가 뭘 찾고 있었는지, 고마워! 나는 내가 인터넷 검색을하는 동안 그 블로그 게시물을 찾지 못했다는 사실이 놀랍다 고 생각한다. sun.management하에, 분명히 많은 재미가 있습니다! – stolsvik

+0

한 번 더 의견을 보내십시오. (OP에 게시 된 아이디어로 돌아 가기) : "OutOfMemoryError 덤프 힙"링크에서 읽을 수 있습니다. "기본 제공 힙 덤퍼를 사용하여 힙 스냅 샷을 다른 경우는 jmap 명령 줄 유틸리티 또는 jconsole 모니터링 및 관리 콘솔을 사용하여 수행합니다. " 이러한 툴은, 아마, 2 번째의 링크가 참조하는 독자적인 MXBean를 사용하고 있을까? 표준 MX-beans에는이 dumpHeap (fileName, live) 메서드가 없다는 것이 이상하다는 것을 알게되었습니다. – stolsvik

+0

일종의 성가신, 예,하지만 그것은 표준 기능이었던 것 같아요, 힙 덤프 형식도 표준화되어야합니다. 최소한, 그것은 많은 일이 될 것이라고 생각합니다. 그리고 아마도 벤더의 VM 구현에서 자유를 제한 할 수 있습니다. – gustafc

4

VM 옵션 -XX:+HeapDumpOnOutOfMemoryError을 사용하여 HotSpot VM에 메모리가 부족한 경우 힙 덤프를 생성하도록하는 방법은 무엇입니까?

+0

+1 : OP가 메모리에 보유하고있는 것을 합리적으로 알 수있는 유일한 "특정 오류 조건"은 OutOfMemoryError입니다. 이 경우 힙을 덤프하면 원하는 힙 덤프가 제공됩니다. –

+0

@Andrzej : 왜 그것이 "합리적인"유일한 오류 조건입니까? VM의 메모리 상황이 내부에서 무엇인지 알 수있는 많은 방법이 있습니다. WeakReference, Runtime과 MX beans 등의 메모리 카운터 (System.gc() 전후) - 보트로드. JProfiler는 놀라지만 프로그램이 아닌 JProfiler 솔루션을 원했습니다. 다음은 내가 겪을 수있는 문제에 관한 또 다른 녀석이다 : http://www.velocityreviews.com/forums/t275440-dump-complete-java-vm-state-as-core-dump-not-via-os-possible.html 나 그는 내가 여기 주어진 해결책을 사랑했을 것입니다. – stolsvik

관련 문제