2012-12-01 3 views
0

JConsole을 사용하여 메모리 누수를 감지하는 방법을 찾고 있습니다.
내 에 Memory Pool에있는 것을 볼 수 있는데, 내 Tenured Generation에 대해 UsageThreashold을 정의 할 수 있습니다.
내 응용 프로그램이이 threashold를 초과하면 메모리 탭에서 힙 메모리가 빨간색이됩니다.UsageMemory threashold in JConsole

질문 : 어떻게 도움이됩니까? 내 기억을 분석하기 위해이 설정을 어떻게 사용해야합니까? 이 값을 어떻게 알아 내야하나요?

답변

0

제 의견으로는 UsageThreashold 매개 변수가 메모리 누수를 감지하는 데 가장 도움이된다고 생각하지 않습니다. (누군가가 알고있는 경우 공유하십시오). 내 경험에 의하면 매개 변수가 내 응용 프로그램이 최대 힙 크기에 너무 가까워지면 시각적으로 이해하는 데 도움이되며 OutOfMemoryException을 얻을 위험이 있습니다.

아직도 메모리 누수를 검색하기 위해 JConsole을 사용하는 것에 관해서는, 나는 그 과정을위한 은색 총알이 없다고 생각합니다. 하지만 보통 내가하는 일은 다음과 같습니다.

메모리 누수가있는 경우 누수되는 객체가 수집되지 않으므로 Tenured Generation이 (가) 누락되면 완전히 복구되지 않습니다. GCs. 전체가 발생합니다 내가 JConsole을 연결하고 내 응용 프로그램의 여러 계산 후도 Perform GC 버튼을 눌러 포함하여 발생하는 다양한 GC를 (후에 경우 메모리 탭을 관찰하여 누수를 발견하려고 응용 프로그램을 실행,와

gc) 메모리가 절대로 메모리 값 이하로 떨어지지 않으면 뭔가가 새고 있다는 큰 가능성이 있음을 추적하기 시작했습니다. 누출이 클 때 메모리에서 계단 그래프를 볼 수 있습니다.

응용 프로그램에서 실행 시간이 길고 메모리를 소비하는 경우이 분석을 신중하게 수행해야합니다. 이러한 프로세스가 완료되면 이해해야합니다. 예를 들어, 계산 중 하나를 실행하고 전, 후 및 후 메모리의 전체 발전을 추적하십시오.

또한 visualVM을 시도해보십시오. 힙 덤프를 만들 수 있기 때문에 힙 덤프를 만들 수 있습니다.이 힙 덤프는 메모리에있는 개체를 파악하고 참조 그래프를 탐색하여 왜 존재하지 않는지 이해할 수 있습니다. 모은.

+0

그러나 응용 프로그램이 '개요'또는 '메모리'탭의 최대 힙 크기에 근접하는지 확인할 수 있습니다. – Cratylus

+0

@Cratylus : 맞습니다. jconsole이 관심을 집중시키지 않는 다른 모니터에서 실행되고있는 경우, 눈의 구석에서 쉽게 발견 할 수있는 색상 변경이 도움이됩니다. – pabrantes

+0

다른 사용법이 없다는 것을 100 % 확신하지는 않지만 나는이 대답을 받아 들일 것입니다. – Cratylus

0

JMAP을 사용하여 히스토그램을보고 Eclipse 맷 또는 YourKit과 같은 도구를 사용하여 힙 덤프를 작성하고 메모리 소비량을 조사 할 수 있습니다. JConsole은 MBean을 모니터링하고 실행하는 데 더 많이 사용되며 분석을 위해 필요하지 않으며 만료시 JVisualvm을 사용하면 코드를 샘플링하고 CPU가 소비하는 메소드를 볼 수 있으므로 JVisualvm이 더 좋습니다.