촌놈입니다! 앞서서 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 운용에 대한 원문 링크
'촌놈 - 취미로하는개발 > 웹' 카테고리의 다른 글
[Java-JDK] 스프링 Scheduling 적용 하기 - Spring 5 (0) | 2018.11.23 |
---|---|
[Javascript] 자바스크립트 게시물 링크 자동 생성하기 - autolink.js (0) | 2018.11.22 |
JSP Oracle JDBC 데이터베이스 연결 예제 (3) | 2018.11.02 |
[Javascript] 자바스크립트 숫자만 허용 하는 다양한 방법 (0) | 2018.10.22 |
[Javascript] 자바스크립트 LPAD, RPAD 좌우를 특정문자로 채우기 (0) | 2018.10.19 |