촌놈입니다! 앞서서 JConsole을 이용한 로컬 JDK 자원 모니터링(profiling) 을 해보았는데요 이번에는 JMX라는 확장 라이브러리를 이용 JConsole, VisualVM 기반으로 톰캣에 대한 자원내역을 분석 해보는 방법을 알아 보려고 합니다.


테스트 환경

 - 리눅스 CentOS 6.10 (윈도우도 설정은 동일 합니다 BAT 파일)

 - JDK 8

 - Tomcat 9 + JMX

 - 모니터링(Profiling) 툴 : JConsole, VisualVM


※ 주의 점으로 해당 톰캣 버전의 JMX를 다운로드 하셔야 한다는 것이며 JMX의 경우 7 버전 부터 제공이 되고 있는 것으로 보이는군요!


기본준비


톰캣의 프로세스에 접근을 하기위해 JMX를 먼저 설치하고 JMX를 톰캣의 확장 모듈이 인식을 시켜야 합니다...


1. JMX 다운로드 및 모듈반영 (톰캣 7 이상의 버전에서 제공)

   


        ※ 다운로드 받은 파일은 Tomcat HOME 내의 lib 폴더에 넣습니다!



2. Tomcat 서버에 JMX 모둘 로드 셋팅 1/2 단계


CATALINA_OPTS 항목에 아래의 항목을 등록 하며 이때 방법은 다양하지만 아래와 같이 2가지의 방법으로 할 수 있습니다. 그리고 아래 옵션은 패스워드나 기타 정보 없이 접근을 위한 방법입니다


Djava.rmi.server.hostname 항목은 해당 서버의 IP 정보를 셋팅 해주세요 (필수) 예를 들어 127.0.0.1로 넣게되면 접근이 되지 않습니다.

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.authenticate=false

-Djava.rmi.server.hostname=192.168.0.241

-Dcom.sun.management.jmxremote.ssl=false


[방법1]


Tomcat HOME 내의 BIN 폴더내에서 setenv.sh 를 생성 하는법 해당 파일을 생성하게 되면 Tomcat 이 구동시에 setenv.sh 파일을 동시에 호출 하게 됩니다.

#!/bin/sh
  
JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.241 -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"

※ 잠깐! 파일을 만드실때 실행 속성 0750 주시는 것도 있지 말아 주세요!



[방법2]


catalina.sh 내에서 직접 옵션을 추가 하는방법으로 JAVA_OPTS의 위치를 찾습니다.

그리고 아래와 같이 적용합니다.

JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.241 -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS $JMX_OPTS -Djava.security.egd=file:/dev/./urandom -Xms8192m -Xmx8192m"


3. Tomcat 서버에 JMX 모둘 로드 셋팅 2/2 단계


톰캣이 시작될때 라이브러리 모듈 로딩을 적용이후 Tomcat 리스너에 추가 정보를 아래와 같이 반영합니다.


이때 rmiRegistryPortPlatform 포트는 실제 접근하게 될 원격지 정보이며 기존 운영 포트와 충돌이 나지 않도록 설정을 하시면됩니다.

<Server port= .... 중략 shutdown="SHUTDOWN">

<! -- 기본의 리스너 하위에 추가 -->

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="8800" rmiServerPortPlatform="8810"/>

</Server>

※ 잠깐! 리눅스 가 테스트 환경임으로 포트에대한 외부 접근을 허용 해주세요


4. Tomcat 재시작!


JConsole 톰캣 접근 해보기!


앞서 설정 과정이 완료 되면 이제 JConsole을 통하여 접근을 해보겠습니다. JConsole 은 JDK를 설치하시면 기본으로 설치되는 프로그램 이며 프로세스 모니터링을 제공 합니다.


- 위치는 JDK HOME 아래의 BIN 폴더에 존재합니다.


[접근을 위한 정보 입력 화면]


원격지, 톰캣 JMX 접속 정보를 입력하고 Connect 를 입력하면 보안 창이 호출됩니다. SSL을 이용하지 않음으로 SKIP을 진행 하시면됩니다.


[JConsole을 통한 Tomcat 프로세스 자원 모니터링]


대략적인 자원 정보가 나옵니다 이정도만으로도 화면을 호출할때 CPU 점유율이나 메모리 점유율이 충분히 판단이 됨으로 리팩토링 및 설계의 잘못됨을 판단하는데는 충분 하다고 볼 수 있습니다.


 VisualVM 톰캣 접근 해보기!


해당 프로그램은 JConsole 보다는 조금더 시각화가 좋은 프로그램으로 profiling 툴은 여러 종류가 있습니다. 물론 유료는 더욱 많은 기능과 점검 기능을 제공 하기도 합니다. 예) AppDynamics Lite


[톰캣 접근 입력 화면]


VisualVM  은 여러 목록을 등록해놓고 접근 해볼 수 있는 Manager 역할도 함께 수행 합니다. 로그인은 JConsole과 비슷합니다.



[자원 모니터링 화면 : 조금더 시각화가 잘 되어 있음]



 그리고....


자! 위에서 보신바와 같이 원격지 정보를 접속하여 자원으 사용상태를 모니터링 할 수 있습니다. 금 이화면을 보시는 분이라면 분명 개발의 문제점을 인지 한 상태이며 ... 적어도 이를 기준으로 해결이 되시길 바랍니다


그리고 서버 운용모드로 JMX가 구동됨으로 지속적 OPEN 상태를 유지 하실 경우 반듯이 사용자/패스워드 항목을 넣어서 운용 하시기 바랍니다.


PS. 여기까지 읽어 주셔서 감사합니다.


※ JMX 운용에 대한 원문 링크

https://tomcat.apache.org/tomcat-9.0-doc/monitoring.html


블로그 이미지

촌놈 개발자 일기

개발자로서 살아가는 느낌과 정보를 공유 합니다

,