실제 운영 WAS는 다양한 APM 모니터링 툴을 사용하지만,
개발할 때 OOM 관련 로컬 WAS에 대한 Heap 메모리 모니터링이 필요할 때가 있다.
다양한 툴들이 많지만, 새로 툴까지 설치를 하긴 싫어서 JDK를 설치할 때 제공해 주는 jconsole을 활용하여 로컬에서 간단한 모니터링을 진행하는 편이다.
jconsole의 실행 파일 위치는 JDK 설치 위치(JAVA_HOME으로 주로 지정)의 하위인 bin 폴더에 있다.
JAVA_HOME/bin/jconsole.exe
위 실행파일을 실행하면 아래와 같이 나온다
Local Process에 원하는 게 있다면 바로 Connect를 연결하면 된다.
하지만 나는 로컬 WAS를 보고싶은 것이어서 Remote Process를 사용했다.
Remote Process를 설정하기 전에 내가 모니터링을 원하는 WAS에 추가 설정을 해줘야 한다.
이클립스 내 원하는 WAS의 서버 설정을 열고, Open launch configuration을 선택한 뒤, Arguments > VM arguments에 아래의 설정을 추가해 주면 된다.
스프링 부트라면 부트 내 configuration에 걸면 될 것 같다.
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
위 설정은 JMX(Java Management Extensions) 원격 관리와 관련된 설정으로, JMX는 Java 애플리케이션의 성능 모니터링 및 관리를 위한 프레임워크로, 주로 JVM(Java Virtual Machine)과 관련된 정보를 외부에서 접근하고 제어할 수 있게 해준다고 한다.
간단히 위 속성을 설명하면 아래와 같다.
-Dcom.sun.management.jmxremote : JMX 원격 관리 기능 활성화
-Dcom.sun.management.jmxremote.port=8999 : JMX 원격 연결을 수락할 포트
-Dcom.sun.management.jmxremote.ssl=false : SSL 연결 사용하지 않도록 설정
-Dcom.sun.management.jmxremote.authenticate=false : 연결 시 인증 비활성화
로컬 환경이라 SSL과 인증은 비활성화했다.
저기서 포트번호는 내 프로젝트가 있는 포트번호와 다르게 해야 한다.
내가 설정한 프로젝트의 서버의 포트번호가 8080이라면, JMX 설정은 8999로 해서 jconsole 8999로 접속하고 모니터링 대상이 되는 WAS의 서버는 8080인 것이다.
이제 내가 설정한 WAS(8080)를 기동 해주자.
WAS가 잘 올라간 뒤, jconsole.exe를 켜서 Remote Process에 아까 설정했던 포트와 함께 입력하면 된다.
그리고 Connect를 누르자
localhost:8999
연결이 성공한 모습이다.
프로젝트의 서비스가 어떤 행위를 할 때 메모리를 많이 먹는지, CPU가 튀는지 간단히 확인하면 된다.
jconsole을 켜놓고 실행 중인 WAS(8080)를 중단시키면 경고창이 뜨면서 jconsole 모니터링도 중단된다.
'Java' 카테고리의 다른 글
[Java] Stream - findAny(), findFirst() 차이 (0) | 2024.11.21 |
---|---|
[Java/Spring] File 디렉터리(폴더)가 생성되지 않는 이슈[mkdir(), mkdirs()] (0) | 2024.06.27 |
[프로그래머스/JAVA] 이웃한 칸 (0) | 2024.02.03 |
[JAVA] Annotation 어노테이션이란? (2) | 2024.01.12 |
[JAVA] Date -> Calendar, Calendar -> Date 변환하기 (0) | 2023.11.15 |
댓글