Machine/JVM

JConsole을 활용한 Java Process Code Cache 모니터링

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도 접근 정보를 이용해 모니터링이 가능하다.

 

그림1. JConsole

 

 

 

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'"를 보면 된다.

반응형

 

이 글의 저작권은 Dev World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com