2010-08-19 1 views
5

Java 6에서 실행되는 Tomcat 6에 대한로드를 실행 중입니다. Tomcat 서버가로드되는 동안 Java 힙의 힙 덤프를 수집하려고합니다. 일반적으로 jmap -dump를 사용하여 힙 덤프를 수집합니다.로드 중 Java 힙 덤프 수집

그러나 Tomcat이 높은로드를 처리 할 때이 작업을 시도하면 힙 덤프 모음이 실패합니다.

jmap은로드중인 프로세스에서 힙 덤프를 수집하는 가장 좋은 도구입니까? jmap이 힙 덤프를 수집하지 못하게하는 원인은 무엇입니까?

jmap이 최상의 도구가 아니라면 무엇이 더 좋을까요?

힙 덤프가 수행되는 동안 jmap (또는 다른 도구)이 Java 프로세스 내에서 세계를 멈추게하는 것은 전적으로 허용됩니다.

+1

VM에 VisualVM을 연결하고이를 사용하여 힙 덤프를 만들려고 했습니까? –

+0

Tomcat이 원격 Linux 서버에서 실행되기 때문에 이상적인 것은 아닙니다. VisualVM은 원격 힙 덤프를 지원하지만 JVM을 시작할 때 JMX 포트를 열어야합니다. – mchr

+0

http://stackoverflow.com/questions/20235802/ways-how-to-get-heap-dump-from-running-tomcat-7에 대한 자세한 답변이 있습니다. – Vadzim

답변

2

Tomcat을 JMX 포트와 함께 실행하면 visualvm을 사용하여 원격 힙 덤프를 수행 할 수 있습니다. 이것은 jmap이 실패했을 때 성공했다.

2

jmap은로드중인 프로세스에서 힙 덤프를 수집하는 가장 좋은 도구입니까?

나는 생각한다 : 아니오. From this link :

주 -이 유틸리티는 지원되지 않으며 은 장래의 JDK의 버전에서 사용하지 못할 수 있습니다.

+0

대안을 추천 해 줄 수 있습니까? – mchr

+0

아니요, 힙 덤프를 다룰 필요가 없었지만 jmap 정보를 찾았습니다. 궁금해서 행운을 얻습니다. – sourcerebels

2

jmap도 꽤 변덕 스러울 수 있습니다. 문제가있는 경우 :

  • 다시 시도하십시오. OOM 오류가
  • 을 던져 때 사전에 힙 덤프를 취할 표준 구성으로 + HeapDumpOnOutOfMemoryError : 처음
  • 는 -XX 추가 -F 옵션을 사용하여 실패하는 경우가 종종 시도 몇 후 힙 덤프를 얻을 관리
  • Tomcat을 대화식으로 실행하고 ctrl-break 옵션에 힙 덤프를 추가하십시오. 이것은 스레드 덤프도 제공합니다. 아마도 어쨌든 필요할 것입니다.
  • 힙 크기가 특히 크고 반복 가능한 조건이있는 경우 일시적으로 힙 크기를 줄입니다. 결과 파일을 처리하기가 훨씬 쉽고 시간이 덜 들고 성공할 가능성이 높습니다.
+0

이 답변을 주셔서 감사합니다. 다음 번에 jmap을 다시 시도해 보겠습니다. 나는 visualvm 사용에 대한 내 자신의 답변을 게시했습니다. – mchr