[{TableOfContents }]

!! 화면
! 기본화면
[{Image src='1.png' align='left' /}]
! 설정
* CPU 셋팅
[{Image src='1-1.png' align='left' /}]
* 메모리 셋팅
[{Image src='1-2.png' align='left' /}]

%%warning
VisualVM을 사용해서 Tomcat에 대한 프로파일링을 할때 죽는 경우가 자주 발생한다. 특히 eclipse를 사용해서 할 경우 그런데 이 경우 VisualVM을 먼저 실행하고 eclipse를 실행하면 거의 발생하지 않는다. 
%% 

!! 기능
VisualVM이 제공하는 프로파일링 기능은 CPU와 메모리를 대상으로 하는 기능으로 나눌수 있습니다. 하지만 제공하는 기능에 다소 문제가 있거나 설정방법이 숨겨져 있거나 문제가 있어 보입니다. 

! CPU
[{Image src='2-1.png' align='left' width='100%' /}]
일반적인 프로파일러에서 제공하는 CPU프로파일링은 호출되는 메서드별로 얼마나 시간을 소요하고 있는지를 보여줍니다. 하지만 VisualVM은 호출되는 메서드 단위라기 보다는 해당 인스턴스별로 보여준다고 할까요..?? 화면에서 보시듯이 인스턴스 별로 CPU 소요시간과 호출 횟수를 보여주고 있습니다. 

[{Image src='2-11.png' align='left' width='100%' /}]
CPU 프로파일링을 하면서 스냅샷을 만들었습니다. 스냅샷내 호출 트리 정보입니다. 쓰레드 별로 보여준다고 보시면 됩니다. 

[{Image src='2-12.png' align='left' width='100%' /}]
전체적으로 소요시간이 가장 긴 호출에 대한 정보를 보여줍니다. 

[{Image src='2-13.png' align='left' width='100%' /}]

! 메모리
[{Image src='2-2.png' align='left' width='100%' /}]
메모리 프로파일링은 화면에서 보여주듯이 할당되어 사용되고 있는 객체, 용량, 개수 등등을 보여줍니다. 

[{Image src='2-21.png' align='left' width='100%' /}]

[{Image src='2-22.png' align='left' width='100%' /}]
시점별로 스냅샷을 찍어 메모리 사용 정보를 각 시점별로 비교할 수 있습니다. 가장 기본적이면서 가장 중요한 기능중에 하나입니다.