JConsole이란?
JConsole이란 실행중인 java process를 모니터링 하는 응용프로그램으로, jdk에 포함되어 나온다. 응용프로그램이어서 실행하면 바로 사용할 수 있다.
윈도우에서 사용하기 위해 필요한 사항
Mac은 기본으로 권한을 올려주지만, 윈도우에서 사용하기 위해서는 별도의 설정이 필요하다.
1. C:\Users/유저명/AppData/Local/Temp 폴더 에 접근한다.
2. hsperfdata_[유저명] 폴더를 찾아 오른쪽 클릭 후 속성 클릭 후 Security 클릭한 후 모든 유저 - 편집 을 누른다.
3. 아래의 Permission 탭에 모든 권한을 클릭한 후 OK를 누른다.
JConsole 위치
mac과 window의 JConsole을 위치가 다르다.
mac : /Users/[유저명]/Library/Java/JavaVirtualMachines/[설치한 jdk]/Contents/Home/bin/jconsole
Window : C:\Program Files/Java/[설치한 jdk]/bin/jsonsole.exe
위 폴더에 접근한 후 더블클릭하면 JConsole이 실행된다.
JConsole 사용 방법
1. JConsole을 실행하면 다음과 같은 화면이 나온다. Local Process는 컴퓨터의 로컬 프로세스 중 jvm process를 표시하며, Remote Process도 접근 정보를 이용해 모니터링이 가능하다.
2.위 그림1의 화면에서 로컬 프로세스를 모니터링 하기 위해서는 Process 명보다 PID를 통해 모니터링할 프로세스를 찾는 것이 좋다. JConsole 상에서 Process명은 잘 안나오기 때문이다.
pid를 찾는 방법은 다음과 같다.
ps -ef [pid]
예를 들어 위에서 48709에 대한 프로세스는 다음과 같이 확인이 가능하다. 안드로이드 스튜디오가 수행되는 것을 확인할 수 잇다.
$ ps -ef 54216
UID PID PPID C STIME TTY TIME CMD
501 54216 1 0 토02PM ?? 14:11.36 .../Android Studio.app/Contents/MacOS/studio
3. 위에서 PID를 이용하여 모니터링을 원하는 프로세스를 선택하면 해당 프로세스의 모니터링 정보가 나타나며, Memory 탭에서 모니터링을 원하는 CodeHeap이나 CodeCache를 누르면 모니터링이 가능해진다.
예를 들어 아래 코드를 수행한 후 CodeHeap 'profiled nmethods' 을 모니터링 하고 싶다면
java -XX:+PrintCodeCache -XX:InitialCodeCacheSize=240m -XX:ReservedCodeCacheSize=2g Main
hello
CodeHeap 'non-profiled nmethods': size=1045728Kb used=18Kb max_used=18Kb free=1045709Kb
bounds [0x0000000154043000, 0x0000000163043000, 0x0000000193d7b000]
CodeHeap 'profiled nmethods': size=1045724Kb used=109Kb max_used=109Kb free=1045614Kb
bounds [0x000000011430c000, 0x000000012330c000, 0x0000000154043000]
CodeHeap 'non-nmethods': size=5700Kb used=982Kb max_used=991Kb free=4718Kb
bounds [0x0000000113d7b000, 0x000000011430c000, 0x000000011430c000]
total_blobs=315 nmethods=83 adapters=146
compilation: enabled
stopped_count=0, restarted_count=0
full_count=0
Memory - Chart에서 Memory Pool "CodeHeap 'profiled nmethods'"를 보면 된다.