https://visualvm.github.io/download.html
VisualVM: Download
First Steps Unzip the downloaded archive. The archive already contains the top-level visualvm directory. Start VisualVM by invoking the binary appropriate for your OS:visualvm\bin\visualvm.exe or visualvm/bin/visualvm You may provide additional options to
visualvm.github.io
여기에서 각 OS 별로 맞는 VisualVM을 다운로드한다.
이후 Visual GC Plugins를 추가적으로 설치하여 Application의 GC를 모니터링해보고자 한다.
Tools > plugins > Available Plugins > VisualGC를 클릭 후 install
============================================================================
<<분석 예시>>
intelliJ에서 Java Code를 만들어서 OOM이 떨어질 때까지 루프를 돌린 후, VisualVM에서 Visual GC를 통해 모니터링하고자 한다
왼쪽에 JAVA로 실행되고 있는 process 목록이 PID와 함께 목록에 나와 있다.
이 test의 경우, IntelliJ에 JAVA 코드를 만들었기에, 해당 목록 확인
해당 소스 코드를 통해 ArrayList에 OOM을 발생시킬 것으로 예상되는 값만큼 add 시켰다.(물론 무한 loop를 줘도 된다)
heap size 부족으로 OOM이 발생되었다.
이를 VisualVM에서 확인하면 각각 Metaspace, Old, Young 영역에서 JAVA 메모리가 어떠한 방식으로 차는지, 또 어떻게 기동 하는지 원리를 파악할 수 있다.
JAVA 메모리 구조에 대해서는 https://billy727.tistory.com/83?category=1042873 <<< 이 글 참고.
JVM memory 구조
JVM이란? => Java Virtual Machine의 약자. JAVA와 OS 사이에서 중개자 역할 및 JAVA가 OS에 구애받지 않고 프로그램 실행시킬 수 있도록 도와주는 역할. Garbage Collector를 사용하여 메모리 관리도 자동으..
billy727.tistory.com
============================================================================
<<원격 접속>>
JAVA process를 이용하는 WebLogic을 VisualVM을 통해 모니터링해보고자 한다.
WebLogic은 가상 서버(VM)에서 돌아가기 때문에 VisualVM의 remote 연결이 필요하다.
우선 WebLogic을 기동 할 때 다음과 같은 JVM option을 추가해서 기동 한다.
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8500 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder -Djava.rmi.server.hostname=192.168.56.242 (Linux 환경과 연결 시, hostname이 달라서 연동이 되지 않을 때 사용) |
포트 번호는 가용 가능한 포트 번호를 지정하도록 한다.
위의 JVM 옵션과 같이 WAS를 구동하면, 8500 포트를 이용하여 JMX를 통해서 VisualVM 원격 접속이 가능해진다.
remote에서 add remote host를 클릭 > host에 WLS가 기동 중인 VM IP 입력 > 생성된 호스트 표시 마우스 우클릭하고
'Add JMX Connection' > connection 란에 {가상 서버 IP} : {jmx report port} 입력
+ VisualGC가 붙지 않는 현상이 있는데, 이는 권한 문제이다.
이럴 때는 권한을 따로 부여해줘야 한다.
/tmp 파일에 tools.policy 파일을 만들어준다.
vim /tmp/tools.policy
tools.policy에 다음과 같은 내용을 추가해준다.
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
그리고 {JAVA_HOME}/bin/jstatd를 실행시키는데, 다음과 같은 옵션으로 실행시킨다.
jstatd -J-Djava.security.policy=/tmp/tools.policy -J-Djava.rmi.server.hostname=192.168.56.242
Jstatd라는 이름으로 list에 추가되며, VisualGC를 확인할 수 있는 것을 볼 수 있다.
============================================================================
JConsole을 통해서도 Memory 확인을 할 수 있다.
Jconsole은 {JDK 경로}/bin의 Jconsole.exe 를 통해서 실행시킬 수 있으며, VisualVM과 마찬가지로 PID를 택해서 호스트 PC의 process나 remote pc의 process에 대한 Memory 상태도 그래프로 확인할 수 있다.
'Open Source > APM' 카테고리의 다른 글
Whatap ~ weblogic 연동하기 (0) | 2023.06.13 |
---|---|
Scouter client (0) | 2023.03.10 |
Zabbix (0) | 2022.02.14 |
Scouter (1) | 2022.01.20 |