JEUS

Similar documents
JEUS

Tmax

Microsoft Word - JEUSJMX안내서.doc

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

rmi_박준용_final.PDF

Interstage5 SOAP서비스 설정 가이드

Microsoft Word - AnyLink Introduction v3.2.3.doc

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

개발및운영 Tibero DB Link (Tibero To Oracle) - Local 방식

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

[JEUS 7] eclipse plug-in 연동 1. 개요 Eclipse 와 JEUS 7 연동시필요한 plug-in 제공및환경설정에관한가이드제공하여 Eclipse 에서 JEUS 7 기동및 종료테스트할수있는방법을기술하였습니다. 2. Plug-in 설치 2.1 [Step

.

설치및환경설정 JEUS Thread State Notify 설정

인디쓔피-IOM핸돜벁닄큐1014pdf, page Preflight ( IOM핸돜벁닄큐__1014 )

교육2 ? 그림

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint 프레젠테이션

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Tibero

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint 프레젠테이션

JEUS

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 18-DataSource.ppt

신림프로그래머_클린코드.key

자바-11장N'1-502

MasoJava4_Dongbin.PDF

untitled

개발및운영 Tibero Perl 연동

마리오와 소닉 리우 올림픽™

JMF2_심빈구.PDF

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Hardware Manual TSP100

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

목차 1. 노드매니저종류 Java Type SSH Type 노드설정파일및로깅 nodes.xml jeusnm.properties <servername>.properties...

[Brochure] KOR_TunA

untitled

PowerPoint 프레젠테이션

FileMaker ODBC and JDBC Guide

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

FileMaker 15 ODBC 및 JDBC 설명서

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

12-file.key

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

JEUS

Intro to Servlet, EJB, JSP, WS

No Slide Title

PowerPoint 프레젠테이션

Chap12

Interstage4 설치가이드

C++ Programming

02 C h a p t e r Java

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

歯JavaExceptionHandling.PDF

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

FileMaker ODBC and JDBC Guide

목차 JEUS JNLP Client Sample 가이드 JNLP 란 JNLP의이점 TEST TEST 환경 TEST Sample sample application 셋팅 (ser

JEUS 소개

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JMF3_심빈구.PDF

FileMaker ODBC 및 JDBC 가이드

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Microsoft PowerPoint - RMI.ppt

PowerPoint 프레젠테이션

비긴쿡-자바 00앞부속

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

API 매뉴얼

JUNIT 실습및발표

07 자바의 다양한 클래스.key

uFOCS

JavaGeneralProgramming.PDF

BSC Discussion 1

J2EE Concepts

쉽게 풀어쓴 C 프로그래밊

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs, including any oper

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

Cluster management software

단계

PowerPoint 프레젠테이션

PowerPoint Presentation

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])

Network Programming

PowerPoint 프레젠테이션

untitled

개발및운영 Eclipse 를이용한 ANT 활용방법

Remote UI Guide

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

API 매뉴얼

게시판 스팸 실시간 차단 시스템

Copyrights and Trademarks Autodesk SketchBook Mobile (2.0.2) 2013 Autodesk, Inc. All Rights Reserved. Except as otherwise permitted by Autodesk, Inc.,

Portal_9iAS.ppt [읽기 전용]

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

Microsoft Word - src.doc

Java XPath API (한글)

단계

튜닝및모니터링 HP JVM 튜닝옵션

mytalk

어댑터뷰

PowerPoint Presentation

Transcription:

JEUS JMX 안내서 JEUS v6.0 Fix#8 Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved.

Copyright Notice Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted Rights Legend All TmaxSoft Software (JEUS ) and documents are protected by copyright laws and the Protection Act of Com puter Programs, and international convention. TmaxSoft software and documents are made available under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd. 이소프트웨어 (JEUS ) 사용설명서의내용과프로그램은저작권법, 컴퓨터프로그램보호법및국제조약에의해서보호받고있습니다. 사용설명서의내용과여기에설명된프로그램은 TmaxSoft Co., Ltd. 와의사용권계약하에서만사용이가능하며, 사용권계약을준수하는경우에만사용또는복제할수있습니다. 이사용설명서의전부또는일부분을 TmaxSoft의사전서면동의없이전자, 기계, 녹음등의수단을사용하여전송, 복제, 배포, 2차적저작물작성등의행위를하여서는안됩니다. Trademarks JEUS is registered trademark of TmaxSoft Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Open Source Software Notice This product includes open source software developed and/or licensed by "OpenSSL", "RSA Data Security, Inc.", "Apache Foundation", and "Jean-loup Gailly and Mark Adler". Information about the aforementioned and the related open source software can be found in the "${INSTALL_PATH/license/oss_licenses" directory. 본제품은 OpenSSL, RSA Data Security, Inc., Apache Foundation 및 Jean-loup Gailly와 Mark Adler 에의해개발또는라이선스된오픈소스소프트웨어를포함합니다. 관련상세정보는제품의디렉터리 ${IN STALL_PATH/license/oss_licenses 에기재된사항을참고해주십시오. 안내서정보안내서제목 : JEUS JMX 안내서발행일 : 2011-11-04 소프트웨어버전 : JEUS v6.0 Fix #8 안내서버전 : v2.1.3

내용목차 안내서에대하여... ix 제1장 MBean 정보조회... 1 1.1. jeusadmin 툴사용... 1 1.2. WebAdmin 사용... 2 제2장 JMX Manager 환경설정... 5 2.1. 개요... 5 2.2. JMX Connector 설정... 6 2.2.1. JMXMP Connector 설정... 6 2.2.2. RMI Connector 설정... 7 2.3. HTML 어댑터설정... 7 2.4. SNMP 어댑터설정... 8 제3장 JMX 애플리케이션개발... 11 3.1. 개요... 11 3.2. 애플리케이션구조... 11 3.3. JEUS 유틸리티사용... 12 3.4. JNDI 사용... 13 3.5. JMX Remote API 사용... 15 3.6. Security 설정... 17 3.7. ObjectName... 18 Appendix A. JMX 모니터링예제... 21 A.1. Servlet thread info 모니터링예제... 21 A.2. ThreadPool Info 모니터링예제... 24 A.3. JVM Info 모니터링예제... 26 A.4. JDBC DataSource(DB Connection Pool) 모니터링예제... 28 용어해설... 31 색인... 33 JEUS iii

그림목차 [ 그림 1.1] JEUS 노드트리... 2 [ 그림 1.2] MBean 정보조회화면... 3 JEUS v

예목차 [ 예 2.1] JMX Manager 환경설정 : <<JEUSMain.xml>>... 5 [ 예 2.2] JMXMP Connector 설정 : <<JEUSMain.xml>>... 6 [ 예 2.3] RMI Connector 설정 : <<JEUSMain.xml>>... 7 [ 예 2.4] HTML 어댑터설정 : <<JEUSMain.xml>>... 7 [ 예 2.5] SNMP 어댑터설정 : <<JEUSMain.xml>>... 8 [ 예 3.1] RMIConnector 설정 : <<JEUSMain.xml>>... 16 [ 예 3.2] Security 설정 : <<accounts.xml>>... 17 [ 예 3.3] Security 설정 : <<policies.xml>>... 17 JEUS vii

안내서에대하여 안내서의대상 본안내서는 JEUS 에서 JMX 를관리하고, 유지하는시스템관리자나관계자를대상으로 JEUS JMX 모듈 을사용하기위한내용을설명한다. 안내서의전제조건 본안내서를원활하게이해하기위해서는다음과같은사항을미리알고있어야한다. JEUS의웹서비스에대한이해 JEUS Web Service 안내서참고 JMX 개발에대한기본지식 http://java.sun.com에서스펙이나기타 JMX 관련문서참고 안내서의제한조건 본안내서에서는 Java EE 나 JMX 기술에대한기본적인내용은다루지않는다. 안내서구성 본안내서는총 3개의장과 1개의 Appendix로구성되어있다. 제1장 MBean 정보조회 현재 JEUS에등록되어있는 MBean을조회하는방법을설명한다. 제2장 JMX Manager 환경설정 JEUS 환경설정방법에대해설명한다. 제3장 JMX 애플리케이션개발 JEUS JMX 클라이언트애플리케이션을개발하는방법과그것을설치하는방법에대해서설명한다. Appendix A. JMX 모니터링예제 JEUS MBean 정보를모니터링하는예제를설명한다. 안내서에대하여 ix

안내서규약 표기 <<AaBbCc123>> <Ctrl>+C [Button] 진하게 " "( 따옴표 ) ' 입력항목 ' 하이퍼링크 > +---- ---- 참고주의 [ 그림 1.1] [ 표 1.1] AaBbCc123 의미프로그램소스코드의파일명 Ctrl과 C를동시에누름 GUI의버튼또는메뉴이름강조다른관련안내서또는안내서내의다른장및절언급화면 UI에서입력항목에대한설명메일계정, 웹사이트메뉴의진행순서하위디렉터리또는파일있음하위디렉터리또는파일없음참고또는주의사항주의할사항그림이름표이름 Java 코드, XML 문서 [ command argument ] < xyz > 옵션파라미터 < 와 > 사이의내용이실제값으로변경됨선택사항. 예 ) A B: A나 B 중하나파라미터등이반복되어서나옴 x JEUS JMX 안내서

시스템사용환경 본안내서는모든예제와환경구성을 Microsoft Windows 의스타일을따랐다. UNIX와같은다른환경에서작업하는사람은몇가지사항만고려하면별무리없이사용할수있다. 대표적인것이디렉터리구분자인데, Windows 스타일인 \ 를 UNIX 스타일인 / 로바꿔서사용하면무리가없다. 이외에환경변수도 UNIX 스타일로변경해서사용하면된다. 그러나 Java 표준을고려해서문서를작성했기때문에, 대부분의내용은동일하게적용된다. 관련안내서 안내서 JEUS Server 안내서 JEUS SNMP 안내서 JEUS WebAdmin 안내서 JEUS Web Service 안내서 JEUS Reference Book JEUS XML Reference 설명 JEUS 시스템과서버의개요와시스템관리를위한안내서이다. 산업표준인 SNMP 프로토콜을이용한 JEUS 모니터링에대해설명한안내서이다. JEUS의웹관리툴인 WebAdmin을사용한 JEUS 의설정및제어, 모니터링, 클러스터링, 리소스설정및관리에대해기술한안내서이다. JEUS 내의웹서비스에대해기술한안내서이다. JEUS를사용할때도움이되는 Reference를기술한안내서이다. JEUS관련 XML의설정방법에대해기술한안내서이다. 참고자료 Java EE 5 Specification Java EE management 1.1 Specification JMX 1.2 Specification JMX Remote API 1.0 Specification 안내서에대하여 xi

연락처 Korea TmaxSoft Co., Ltd 272-6, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-721 South Korea Tel: +82-31-8018-1000 Fax: +82-31-8018-1115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr 기술지원 : http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632 U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info@tmaxsoft.co.jp Web (Japanese): http://www.tmaxsoft.co.jp xii JEUS JMX 안내서

China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web (Chinese): http://www.tmaxsoft.com.cn 안내서에대하여 xiii

제 1 장 MBean 정보조회 본장에서는현재 JEUS 에서사용하고있는 MBean 의정보를조회하는방법에대해서설명한다. 1.1. jeusadmin 툴사용 JEUS가설치되어있는노드 ( 예제에서는 johan) 에서 jeusadmin 툴을통해 JEUS에로그인을한후 mbeanlist 명령어를이용하면다음과같이등록된 MBean 정보를조회할수있다. 이때 JEUS 매니저는물론컨테이너와컨테이너의 MBeanServer에등록된모든 MBean의목록이조회된다. JEUS 6.0 Jeus Manager Controller johan>mbeanlist JEUS:name=johan,j2eeType=JeusService,jeusType=JeusManager,JMXManager=johan JEUS:JNDIResourceService=johan,name=JNSServer,j2eeType=JeusService,JeusManager= johan,jeuse=threadpool,jmxmanager=johan JEUS:J2EEServer=null,name=johan,j2eeType=JeusService,JeusManager=johan,jeusType =Schedulervice,JMXManager=johan JEUS:name=jeus.server.ControlThread,j2eeType=JeusService,JeusManager=johan,jeus Type=Threool,JMXManager=johan,NodeControllerService=johan JEUS:name=johan,j2eeType=JeusService,jeusType=JEUSMPConnector,JMXManager=johan JEUS:J2EEServer=null,name=johan,j2eeType=JeusService,JeusManager=johan,jeusType =JMXExportvice,JMXManager=johan 제 1 장 MBean 정보조회 1

1.2. WebAdmin 사용 WebAdmin에서는 jeusadmin 툴보다좀더풍부한 MBean 정보를제공한다. WebAdmin에서 MBean 정보를조회하는방법은다음과같다. 1. WebAdmin의왼쪽 JEUS 노드트리에서 [JEUS 모니터링 ] > [MBean 모니터링 ] 메뉴를선택한다. [ 그림 1.1] JEUS 노드트리 2 JEUS JMX 안내서

2. 다음과같이 MBean 정보조회화면이나타난다. [ 그림 1.2] MBean 정보조회화면 MBean 정보조회화면에서는 MBean 의구조와이름, ObjectName 뿐만아니라, 각 MBean 의 attribute 와 operation 에대한정보도조회가가능하다. 또한통계정보를포함하고있는 MBean 에대해서는그값을 그래프로나타낸다. 참고 WebAdmin 의자세한내용은 JEUS WebAdmin 안내서 의 제 5 장모니터링 을참고한다. 제 1 장 MBean 정보조회 3

제 2 장 JMX Manager 환경설정 본장에서는 JMX Remote API Connector, HTML 어댑터, SNMP 어댑터에대한개념과설정에대해서설 명한다. 2.1. 개요 JMX Remote API 스펙 1.0을따르는클라이언트애플리케이션에게 JEUS JMX는 JEUS의구성과실시간정보를제공해준다. JEUS JMX Manager는다음과같이 3가지의관리객체를가지고있다. 이것은 JEUS 모니터링정보에액세스하는방법으로 3가지를제공한다는것을의미한다. JMX Remote API Connector HTML 어댑터 SNMP 어댑터 JMX Manager의설정은다음의디렉터리에위치한 JEUSMain.xml 설정파일을통해이루어진다. JEUS_HOME\config\<node name> 설정태그인 <jmx-manager> 는다음과같이 <node> 나 <engine-container> 내에서설정할수있다. [ 예 2.1] JMX Manager 환경설정 : <<JEUSMain.xml>> <?xml version="1.0"?> <jeus-system xmlns="http://www.tmax.co.kr/xml/ns/jeus"> <!-- The above XML header will not be repeated in the examples below--> <node> <engine-container>... <jmx-manager>... </jmx-manager> </engine-container>... <jmx-manager>... </jmx-manager> <node> 제 2 장 JMX Manager 환경설정 5

참고 JMX Manager 의설정은 WebAdmin 을통하여설정할것을권장한다. 2.2. JMX Connector 설정 JMX Connector는 JMX Remote API에서정의되어있는, 리모트에서 JMX MBeanServer에접근하기위한 Connector로제공되는 Connector는다음과같다. 소켓기반의 JMXMP Connector Remote API에정의되어있는 RMI Connector JEUS에서는기본적으로 JMXMP Connector를사용하고, <jmx-manager> 내의 <jmx-connector> 태그로설정한다. 참고 <jmx-manager> 하위태그의자세한설명은 "JEUS XML Reference" 를참고한다. 2.2.1. JMXMP Connector 설정 JMX를액세스할때사용하는 JEUSMP Connector의 Listen Port를지정한다. 만약이값이 0이거나지정하지않으면 JEUS의공통 Port를 JMXMP Connector의 Listen Port로사용한다. 만약 JEUS의 JMX Re moteapi를사용하지않고다른 Runtime에서 JMXMP 프로토콜로접근하려면이값을 0이아닌다른값으로지정해야한다. 다음은 JMXMP Connector 설정예제이다. [ 예 2.2] JMXMP Connector 설정 : <<JEUSMain.xml>> <jmx-manager> <jmx-connector> <jmxmp-connector> <jmxmp-connector-port>5001</jmxmp-connector-port> </jmxmp-connector> </jmx-connector> <html-adaptor-port>7070</html-adaptor-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 6 JEUS JMX 안내서

2.2.2. RMI Connector 설정 RMI Connector는 Port, Export Name 그리고 Reference Export Name을설정해야한다. 만약 JMXMP Connector와같이설정되어있는경우에는 JEUS system 내부적으로는 JMXMP Connector를사용하게된다. 이경우에는 Reference Export Name이별도로설정되어있어야한다. Reference Export Name이 JEUS에서기본적으로사용하는이름과같거나설정이되어있지않다면 exception이발생한다. 다음은 RMI Connector 설정예제이다. [ 예 2.3] RMI Connector 설정 : <<JEUSMain.xml>> <jmx-manager> <jmx-connector> <rmi-connector> <rmi-connector-port>5005</rmi-connector-port> <export-name>myrmiconnector</export-name> </rmi-connector> </jmx-connector> <html-adaptor-port>7070</html-adaptor-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 2.3. HTML 어댑터설정 HTML 어댑터는 HTML을지원하는 JMX의프로토콜어댑터이다. HTML 어댑터는 JEUSMain.xml 내의 <jmx-manager> 에서설정한다. HTML 어댑터설정예는다음과같다. [ 예 2.4] HTML 어댑터설정 : <<JEUSMain.xml>> <jmx-manager> <jmx-connector> <jmxmp-connector> <jmxmp-connector-port>5001</jmxmp-connector-port> </jmxmp-connector> </jmx-connector> <html-adaptor-port>7070</html-adaptor-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> 제 2 장 JMX Manager 환경설정 7

</snmp-adaptor> </jmx-manager> 다음은기본으로설정할태그에대한설명이다. 태그 <html-adaptor-port> 설명 HTML 어댑터의 Listener Port로, 웹브라우저로접속할 HTML 어댑터의 Port 를지정한다. -1로설정을하면 JMX Manager가 HTML 프로토콜을사용하지않음을의미한다. 다른서비스가사용하는 Port를사용하면안된다는것을유념한다. 2.4. SNMP 어댑터설정 SNMP 어댑터는 JMX가제공하는 SNMP 프로토콜어댑터이다. SNMP 어댑터는 JEUSMain.xml 내의 <jmx-manager> 에서설정한다. SNMP 어댑터설정예는다음과같다. [ 예 2.5] SNMP 어댑터설정 : <<JEUSMain.xml>> <jmx-manager> <jmx-connector> <jmxmp-connector> <jmxmp-connector-port>5001</jmxmp-connector-port> </jmxmp-connector> </jmx-connector> <html-adaptor-port>7070</html-adaptor-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size> 4096 </snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 다음은기본으로설정할태그에대한설명이다. 태그 <snmp-adaptor-port> <snmp-version> 설명 SNMP 어댑터의 Listener Port로 SNMP 어댑터에대한설정은선택사양이며, <snmp-adaptor-port> 는필수입력사항 (mandatory) 이다. 다른서비스가사용하는 Port를사용하면안된다는것을유념한다. SNMP 버전을지정하며 1, 2 또는 3을지정할수있으며, 기본값은 3이다. 8 JEUS JMX 안내서

태그 <snmp-max-packet-size> <snmp-security> 설명 SNMP 패킷에대한최대값을설정하며최소 256 Bytes부터설정할수있다. 기본값은 4096이다. 보안을적용시킬것인지를설정한다. true 또는 false로지정하며, 기본값은 false이다. true는 SNMP 버전 3에서만지정이가능하다. 제 2 장 JMX Manager 환경설정 9

제 3 장 JMX 애플리케이션개발 JEUS 모니터링서비스를사용하기위한 JEUS JMX 클라이언트애플리케이션의개발및설치방법에대 해서설명한다. 3.1. 개요 JEUS JMX를사용하는 3가지방법은다음과같다. JEUS 유틸리티 (RemoteMBeanServerFactory) JNDI JMX Remote API 그외에, JEUS 모니터링서비스를위한보안설정방법과 JEUS JMX에서 ObjectName을생성하는규칙에대해서설명한다. SNMP를사용해서 JEUS 모니터링이가능한데, 사용방법은 "JEUS SNMP 안내서 " 에서확인할수있다. 본장에서설명하는예제는 JEUS_HOME\samples\jmx\clientsetup 디렉터리를참고한다. 참고본문에서설명하는내용을이해하기위해서 JMX Remote API 1.0과 Java EE Management 스펙에대한기본지식이있어야한다. JMX Remote API에대한자세한정보는 SUN에서제공하는 J2EE JMX Remote API 1.0 스펙과 JMX Remote API를참고한다. 3.2. 애플리케이션구조 애플리케이션의구조는필요에따라다양한형태가있다. JEUS JMX 클라이언트애플리케이션은일반적인구조로구성되어있고, 구성된그구조를따라수행한다. 다음은 JMX 클라이언트애플리케이션의수행구조및과정이다. 1. 환경설정 ( 옵션사항 ) JMX 클라이언트애플리케이션을위해환경을설정한다. 환경설정을 MBeanServer에연결하기전에할수있다. 처리하려는 MBean을질의하고, 그결과를받아서처리할수있다. 2. MBeanServer 연결 MBeanServer로접속하기위한방법은앞서말한 3가지방법이있다. jeus.management.remotem BeanServerFactory는 JEUS 유틸리티를사용하는경우사용되고, 이외에 JNDI에등록되어있는 refer ence를사용하거나 JMX Remote javax.management.remote.jmxserviceurl을사용하여 javax.man agement.remote.jmxconnector를얻을수있다. 자세한내용은다음장에서설명한다. 제 3 장 JMX 애플리케이션개발 11

3. 질의 4. 질의결과처리 3.3. JEUS 유틸리티사용 본절에서는 JEUS 유틸리티클래스인 jeus.management.remotembeanserverfactory를사용해서 JEUS 를모니터링하는 JMX 애플리케이션에대해서설명한다. "MBeanServer 연결 " 부분이다른방법과차이가있다. 다음은 JEUS 유틸리티를사용하는클라이언트예제이다. package jmxclient; import java.util.set; import java.util.iterator; import java.util.hashtable; import javax.management.objectname; import javax.management.mbeanserverconnection; import javax.naming.context; /** * JMX Client which uses JEUS utility (RemoteMBeanServerFactory) class. */ public class JMXClientUsingJeusUtility { public static void main(string args[]) throws Exception { if(args.length < 3) { System.out.println("Required arguments: hostname username password"); return; // Step 1. Setting Environments String hostname = args[0]; String username = args[1]; String password = args[2]; Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.jnscontextfactory"); env.put(context.provider_url, hostname); env.put(context.security_principal, username); env.put(context.security_credentials, password); // Step 2. Getting MBeanServer MBeanServerConnection mbeanserver = jeus.management.remotembeanserverfactory.getmbeanserver(env); 12 JEUS JMX 안내서

// Step 3. Query ObjectName jeusscope = new ObjectName("JEUS:*"); Set objectnames = mbeanserver.querynames(jeusscope, null); // Step 4. Handling the Query Result for(iterator i = objectnames.iterator(); i.hasnext();) { System.out.println("[MBean] " + i.next()); "MBeanServer 연결 " 에서 JEUS 가제공하는 JEUS 유틸리티클래스인 jeus.management.remotem BeanServerFactory 를사용했다. 이클래스를사용하면간단하게 MBeanServerConnection 을얻을수있 다. 3.4. JNDI 사용 본절에서는 JNDI를사용해서 JEUS를모니터링하는 JMX 애플리케이션에대해서설명한다. "MBeanServer 연결 " 부분이다른방법과차이가있다. 다음은 JNDI를사용하는클라이언트예제이다. package jmxclient; import java.util.set; import java.util.iterator; import java.util.hashtable; import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.management.remote.jmxconnector; import javax.naming.context; import javax.naming.initialcontext; /** * JMX Client which uses JNDI lookup. */ public class JMXClientUsingJndi { public static void main(string args[]) throws Exception { if(args.length < 4) { System.out.println("Required arguments: " + "hostname username password target-name"); return; // Step 1. Setting Environments String hostname = args[0]; 제 3 장 JMX 애플리케이션개발 13

String username = args[1]; String password = args[2]; // targetname could be node or container name, // for example, "johan", "johan_container1" String targetname = args[3]; Hashtable env = new Hashtable(); env.put(context.initial_context_factory,"jeus.jndi.jnscontextfactory"); env.put(context.provider_url, hostname); env.put(context.security_principal, username); env.put(context.security_credentials, password); // Step 2. Getting MBeanServerConnection InitialContext ctx = new InitialContext(env); JMXConnector connector = null; try{ connector = (JMXConnector)ctx.lookup("mgmt/rmbs/" + targetname); MBeanServerConnection mbeanserver = connector.getmbeanserverconnection(); // Step 3. Query ObjectName jeusscope = new ObjectName("JEUS:*"); Set objectnames = mbeanserver.querynames(jeusscope, null); // Step 4. Handling the Query Result for(iterator i = objectnames.iterator(); i.hasnext();) { System.out.println("[MBean] " + i.next()); finally { // Always close the JMXConnector connector.close(); JNDI에서 Lookup할때에는등록되어있는 Connector(RMI Connector/JMXMP Connector) 의종류에관계없이같은방식으로사용이가능하다. Lookup할때사용하는 Export Name은여기서는 JEUS에서사용하는기본 naming 방식을사용했다. 이방식은 JNDI context mgmt/rmbs/ 아래에 Manager JVM이나 default Engine Container JVM의 MBeanServer는 <node name> ( 예 : johan), 그외별도로띄워진 Engine Container 의경우는 <node name>_<container_name> ( 예 : johan_container1) 의이름이다. 그외에 RMI Connector의경우에는 JMXMP Connector가별도로띄워져있는경우에기본방식이외의이름을 reference export name으로지정할수있다. 14 JEUS JMX 안내서

참고 1. RMI Connector 설정의자세한내용은 "JEUS XML Reference" 를참고한다. 2. JNDI의자세한정보에대해서는 "JEUS Server 안내서 " 를참고한다. 만약에 JMX 애플리케이션이서블릿또는 EJB에서실행된다면 JNDI 파라미터에대한설정은필요하지않다. 3. Security 설정에대한자세한설명은 3.6. Security 설정 을참고한다. 3.5. JMX Remote API 사용 본절에서는 JMX Remote API를사용해서 JEUS를모니터링하는 JMX 애플리케이션에대해서설명한다. "MBeanServer 연결 " 부분이다른방법과차이가있다. 다음은 JMX Remote API를사용하는클라이언트예제이다. package jmxclient; import java.util.set; import java.util.iterator; import java.util.hashtable; import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.management.remote.jmxserviceurl; import javax.management.remote.jmxconnector; import javax.management.remote.jmxconnectorfactory; import javax.naming.context; /** * JMX Client which uses JMX Service URL. * RMI Connector should be turned on in JEUS * and the JNDI name of it is required here. */ public class JMXClientUsingJmxUrl { public static void main(string args[]) throws Exception { if(args.length < 4) { System.out.println("Required arguments: " + "hostname username password connector-exportname"); return; // Step 1. Setting Environments String hostname = args[0]; String username = args[1]; String password = args[2]; // the JMX RMIConnector export name specified in the JEUSMain.xml 제 3 장 JMX 애플리케이션개발 15

String exportname = args[3]; Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.jnscontextfactory"); env.put(context.provider_url, hostname); env.put(context.security_principal, username); env.put(context.security_credentials, password); // Step 2. Getting MBeanServer JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/" + exportname); JMXConnector connector = null; try { connector = JMXConnectorFactory.newJMXConnector(url,env); // connect to JMXConnectorServer connector.connect(); MBeanServerConnection mbeanserver = connector.getmbeanserverconnection(); // Step 3. Query ObjectName jeusscope = new ObjectName("JEUS:*"); Set objectnames = mbeanserver.querynames(jeusscope, null); // Step 4. Handling the Query Result for(iterator i = objectnames.iterator(); i.hasnext();) { System.out.println("[MBean] " + i.next()); finally { // Always close the JMXConnector connector.close(); 이경우는 RMI Connector를사용할때에한정된다. 위의 exportname 변수에지정되는 URL path는 RMI Connector 설정에서 <export-name> 설정으로바꿀수있다. RMI Connector 설정의자세한내용은 "JEUS XML Reference" 를참고한다. 다음은 RMIConnector를 JEUSMain.xml에지정한예이다. [ 예 3.1] RMIConnector 설정 : <<JEUSMain.xml>> <jmx-manager> <jmx-connector> <rmi-connector> <export-name>rmiconnector</export-name> 16 JEUS JMX 안내서

</rmi-connector> </jmx-connector> </jmx-manager> 3.6. Security 설정 본절에서는 JEUS 모니터링서비스를위한보안설정에대해서설명한다. 기본적으로 Security 파일인 accounts.xml과 policies.xml에서사용자에게권한을줄수있고, 권한을가진사용자들만이 JMX 클라이언트애플리케이션에접근할수있다. 다음은 accounts.xml의예제이다. [ 예 3.2] Security 설정 : <<accounts.xml>>... <accounts> <users> <user> <name>jeus</name> <password>{base64mtexmtexmq==</password> <group>administrators</group> </user> </users> <groups> <group> <description>a group for administrators</description> <name>administrators</name> </group> </groups> </accounts>... 다음은 policies.xml의예제이다. [ 예 3.3] Security 설정 : <<policies.xml>>... <policy> <role-permissions> <role-permission> <principal>jeus</principal> <role>securityadministrator</role> <classname>jeus.security.resource.rolepermission </classname> </role-permission> </role-permissions> <resource-permissions> 제 3 장 JMX 애플리케이션개발 17

<context-id>default</context-id> <resource-permission> <role> SecurityAdministrator </role> <resource>jeus.*</resource> <actions>*</actions> <classname>jeus.security.resource.resource Permission </classname> </resource-permission> </resource-permissions> </policy>... 다음은사용자명 (username), 패스워드를지정하는방식에대한예제이다. // Step 1. Setting Environments Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.jeuscontextfactory"); env.put(context.provider_url, hostname); env.put(context.security_principal, username); env.put(context.security_credentials, password); 이상으로 JMX 애플리케이션의보안설정에대해서알아보았다. 다음절에서는 JEUS MBean의표준 JMX Object Name구조에대해서알아본다. 3.7. ObjectName ObjectName은 MBean 객체의기본 JMX 객체이름이다. ObjectName의형식은 JMX 표준형식이지만 JMX 구현이각각다르기때문에특정벤더에따라값이달라질수있다. JMX MBean들의계층구조는벤더마다다르고, MBean들도벤더에따라여러가지가있다. JEUS ObjectName의문법은다음과같다. <domain_name>: j2eetype=<j2eetype_value>, name=<name_value>, [<parent-j2eetype_value>], [jeustype = <jeustype_value>], [istargetable = <istargetable_value>], [jeusmanager = <jeusmanager_value>], JMXManager = <JMXManager_value> [,*] 또는 <domain_name>: * ObjectName은 domain_name 으로시작해야하고, 각각의이름과값의짝이순차적으로규정되지않는다. 예를들면 JEUS: j2eetype=jeusservice, jeustype=jeusmanager, * 과 JEUS: jeustype=jeusmanager, j2eetype=jeusservice, * 는둘다 JEUSManager MBean의 objectname을얻어온다. 18 JEUS JMX 안내서

다음은각항목에대한설명이다. <domain_name> JEUS 도메인이름으로값은 JEUS이다. j2eetype MBean은 J2EE Type이며, J2EE Management 스펙에의해기술된다. 다음값들중하나를설정한다. JeusService, J2EEDomain, J2EEServer, JVM, EJBModule, MessageDrivenBean, Entity Bean, StatefulSessionBean, StatelessSessionBean, "WebModule", "AppClientModule", "Servlet", "JDBCResource", "JDBCDataSource", JDBCDriver", "JMSResource", "JTAResource", "JMSConnec tionresource", "JMSConsumerResource", "JMSProducerResource", "JAXRResource", "Re sourceadapter", "URLResource", "JavaMailResource" name MBean 의이름으로각각의 MBean Object에는유일한값이있다. 예를들면 johan_container1 이라는컨테이너가실행하는 JVM의이름은 johan_container1 이다. parent-j2eetype MBean의상위 j2ee 타입으로각 MBean들에계층이규정되어있다. 예를들면 JDBCDriver 의상위 j2ee 타입은 JDBCDataSource 이다. jeustype JEUS JMX에서정의된 MBean들의타입이다. JeusService j2eetype만몇가지 jeustype을가질수있다. 다음값들중하나를설정한다. "JeusManager", "JMSConnectionResource", "JMSConsumerResource", "JMSProducerResource", "JMSSessionResource", "EJBEngine", "ContextGroup", "DBConnectionPool", "ThreadPool_WEBC", "ThreadPool", "WebEngine", "WebListener", "JMSClientResource", "JMSQueueConnectionFacto ryresource", "JMSTopicConnectionFactoryResource", "JMSQueueDestinationResource", "JM STopicDestinationResource", "JMSDurableSubscriberResource", "JDBCConnectionInfo", "Policy", "Subject", "Security", "SessionContainerCentral", "SessionContainerP2P", "SessionContainer", "WebtConnectionGroup", "WSEngine", "RemoteWebtob" istargetable 사용자 AP(EJB, 서블릿, JSP) 가디플로이되어 istargetable 동작하는 MBean에서는반드시 true로설정되어야한다. 값은 true 또는 false이다. 제 3 장 JMX 애플리케이션개발 19

Appendix A. JMX 모니터링예제 JEUS MBean 정보를모니터링하는 4가지중요한예제를설명한다. Servlet thread info 모니터링예제 ThreadPool Info 모니터링예제 JVM Info 모니터링예제 JDBC DataSource (DB Connection Pool) 모니터링예제 설명하는모든예제에서 MBeanServer를얻어올때사용하는방법은 RemoteMBeanServerFactory를이용한다. MBeanServer를얻어오는다른방법에대한자세한내용은 제3장 JMX 애플리케이션개발 을참고한다. 설명하는예제는다음의위치에서찾을수있다. JEUS_HOME\samples\jmx\monitoring A.1. Servlet thread info 모니터링예제 Servlet thread info 모니터링예제는웹컨테이너의 Listener의정보, 특히 Thread Pool과각 Thread에대한정보를모니터링하는예제이다. 이예제를통해모니터링하고자하는정보는다음과같다. 현재할당된 Worker Thread의수 (current thread count) Thread Pool을유지하는최대 Thread의개수 (max thread count) Wait-Queue에적체된클라이언트의수 (wait queue count) 다음은 Servlet thread info 모니터링예제이다. import java.util.*; import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.management.objectinstance; import javax.management.malformedobjectnameexception; import javax.management.mbeanserverinvocationhandler; import jeus.management.j2ee.servlet.*; public class ServletThreadInfo { public void showinfo(mbeanserverconnection mbeanserver, String targetname) Appendix A. JMX 모니터링예제 21

throws Exception { System.out.println("=== Servlet Thread Info ==="); // Get the object name of the servlet engine using JMX Standard API // Otherwise, the object name could be queried through MBeanServer. // Please see JEUS MBean API javadoc for more concrete name, key properties. ObjectName name = new ObjectName("JEUS:jeusType=WebEngine,J2EEServer=" + targetname + ",*"); Set names = mbeanserver.querymbeans(name, null); if (names == null names.size() == 0) { System.out.println("there is no servlet engine"); return; // Choose one servlet engine from the returned object names Iterator it = names.iterator(); ObjectName fullname = null; while (it.hasnext()) { fullname = ((ObjectInstance)it.next()).getObjectName(); break; assert fullname!= null; WebEngineMoMBean enginembean = (WebEngineMoMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, fullname, WebEngineMoMBean.class, false); // Get context groups of the servlet engine String[] groups = enginembean.getcontextgroups(); if (groups!= null && groups.length > 0) { for (int i = 0; i < groups.length; i++) { ObjectName group = new ObjectName(groups[i]); ContextGroupMoMBean groupmbean = (ContextGroupMoMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, group, ContextGroupMoMBean.class, false); String contextgroupname = groupmbean.getobjectname().getkeyproperty("name"); // Get listeners from the context group String[] listeners = groupmbean.getweblisteners(); if (listeners == null listeners.length == 0) { return; 22 JEUS JMX 안내서

// Get thread pools from the listeners for (int j = 0; j < listeners.length; j++) { ObjectName listener = new ObjectName(listeners[j]); WebListenerMoMBean listenermbean = (WebListenerMoMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, listener, WebListenerMoMBean.class, false); String[] tpoolnames = listenermbean.getthreadpools(); // Get stats from thread pools if (tpoolnames!= null) { showthreadpoolstats(mbeanserver, contextgroupname, tpoolnames); System.out.println(""); private void showthreadpoolstats(mbeanserverconnection mbeanserver, String contextgroupname, String[] tpoolnames) throws MalformedObjectNameException { for (int k = 0; k < tpoolnames.length; k++) { ObjectName tpool = new ObjectName(tpoolNames[k]); System.out.println("[MBean] " + tpool); ThreadPoolMoMBean tpoolmbean = (ThreadPoolMoMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, tpool, ThreadPoolMoMBean.class, false); ThreadPoolStatsImpl stats = (ThreadPoolStatsImpl) tpoolmbean.getstats(); System.out.println("Listener: " + contextgroupname + "/" + tpool.getkeyproperty("name")); System.out.println("- current thread count : " + stats.getallthreadcount().getcount()); System.out.println("- max thread count : " + stats.getmaxthreadcount().getcount()); if (stats.getstatisticversion() == ThreadPoolStatsImpl.NIO_VERSION) { // pipeline System.out.println("- total connection count : " + stats.gettotalconnectioncount().getcount()); System.out.println("- max queue count : " + stats.getmaxqueuecount().getcount()); Appendix A. JMX 모니터링예제 23

System.out.println("- current queue count : " + stats.getcurrentqueuecount().getcount()); System.out.println("- remain queue count : " + stats.getremainqueuecount().getcount()); System.out.println("- peak queue count : " + stats.getpeakqueuecount().getcount()); System.out.println("- total queue count : " + stats.gettotalqueuecount().getcount()); System.out.println("- difference queue 1m count : " + stats.getdifferencequeue1mcount().getcount()); System.out.println("- difference queue 5m count : " + stats.getdifferencequeue5mcount().getcount()); System.out.println("- difference queue 15m count : " + stats.getdifferencequeue15mcount().getcount()); System.out.println("- overflow queue count : " + stats.getoverflowcount().getcount()); System.out.println("- average queue time : " + stats.getqueuewaittimeaverage().getcount() + "(ms)"); else { System.out.println("- wait queue count : " + stats.getwaitqueuecount().getcount()); System.out.println(); A.2. ThreadPool Info 모니터링예제 ThreadPool Info 모니터링예제는 JEUS 에서사용하는여러 Thread Pool의상태를모니터링하는예제이다. 이예제를통해모니터링하고자하는정보는다음과같다. Thread Pool 크기 (size) 에대한정보 Thread Pool 통계 (stats) 정보 Thread 들의수행시간에대한통계 (execution time stats) 정보 Waiting-Queue 크기에대한통계 (size stats) 정보다음은 Thread Info 모니터링예제이다. package monitoring; import java.util.hashtable; import java.util.iterator; 24 JEUS JMX 안내서

import java.util.set; import javax.management.mbeanserverconnection; import javax.management.mbeanserverinvocationhandler; import javax.management.objectinstance; import javax.management.objectname; import javax.management.j2ee.statistics.timestatistic; import javax.management.j2ee.statistics.rangestatistic; import javax.naming.*; import jeus.jndi.jnsconstants; import jeus.management.jmxconstants; import jeus.management.remotembeanserverfactory; import jeus.management.j2ee.thread.threadpoolmbean; import jeus.management.j2ee.thread.stats.threadpoolstats; public class ThreadPoolInfo { public void showinfo(mbeanserverconnection mbeanserver, String name) throws Exception { System.out.println("=== ThreadPool Info ==="); // Get the object names of the thread pools. // Please see JEUS MBean API javadoc for more concrete name, key // properties. ObjectName objectnames = new ObjectName("JEUS:jeusType=ThreadPool,*"); Set tpmbeans = mbeanserver.querymbeans(objectnames, null); for (Iterator i = tpmbeans.iterator(); i.hasnext();) { ObjectName mbeanname = ((ObjectInstance) i.next()).getobjectname(); // thread pool name System.out.println("[Thread-pool : " + mbeanname.getkeyproperty("name") + "]"); System.out.println("[MBean] " + mbeanname); ThreadPoolMBean pool = (ThreadPoolMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, mbeanname, ThreadPoolMBean.class, false); // ThreadPool Size System.out.println("-size : " + pool.getpoolsize()); System.out.println("-core size : " + pool.getcorepoolsize()); System.out.println("-largest Size : " + pool.getlargestpoolsize()); System.out.println("-max size : " + pool.getmaximumpoolsize()); System.out.println("-queue size : " + pool.getworkqueuesize()); Appendix A. JMX 모니터링예제 25

// ThreadPool Stats ThreadPoolStats stats = (ThreadPoolStats) pool.getstats(); TimeStatistic executiontimestats = stats.getthreadexecutiontime(); TimeStatistic waitingtimestats = stats.getqueuewaitingtime(); System.out.println("# Thread Execution Time Stats"); System.out.println("--unit : " + executiontimestats.getunit()); System.out.println("--count : " + executiontimestats.getcount()); System.out.println("--min time : " + executiontimestats.getmintime()); System.out.println("--max time : " + executiontimestats.getmaxtime()); System.out.println("# Queue Waiting Time Stats"); System.out.println("--unit : " + waitingtimestats.getunit()); System.out.println("--count : " + waitingtimestats.getcount()); System.out.println("--min time : " + waitingtimestats.getmintime()); System.out.println("--max time : " + waitingtimestats.getmaxtime()); A.3. JVM Info 모니터링예제 JVM Info 모니터링예제는 JEUS의노드또는컨테이너의 JVM에대한모니터링을하는예제이다. 이예제를통해모니터링하고자하는정보는다음과같다. JVM의 Total size 정보 JVM의 Heap size 정보 JVM의 Uptime 정보다음은 JVM Info 모니터링예제이다. package monitoring; import java.util.iterator; import java.util.set; import javax.management.mbeanserverconnection; import javax.management.mbeanserverinvocationhandler; import javax.management.objectinstance; import javax.management.objectname; import javax.management.j2ee.statistics.boundedrangestatistic; import javax.management.j2ee.statistics.countstatistic; import javax.management.j2ee.statistics.rangestatistic; 26 JEUS JMX 안내서

import jeus.management.j2ee.jvmmbean; import jeus.management.j2ee.statistics.jvmstatsimpl; public class JVMInfo { public void showinfo(mbeanserverconnection mbeanserver, String targetname) throws Exception { System.out.println("=== JVM Statistics ==="); ObjectName objectname = new ObjectName("JEUS:j2eeType=JVM,name=" + targetname + ",*"); Set jvmmbeans = mbeanserver.querymbeans(objectname, null); for (Iterator i = jvmmbeans.iterator(); i.hasnext();) { ObjectName objname = ((ObjectInstance) i.next()).getobjectname(); System.out.println("[MBean] " + objname); // JVMMBean Stats JVMMBean jvm = (JVMMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, objname, JVMMBean.class, false); JVMStatsImpl jvmstatsimpl = (JVMStatsImpl) jvm.getstats(); RangeStatistic totalsize = jvmstatsimpl.gettotalsize(); BoundedRangeStatistic heapsize = jvmstatsimpl.getheapsize(); CountStatistic uptime = jvmstatsimpl.getuptime(); // JVM Total Size System.out.println("[Total Size]"); System.out.println("-unit : " + totalsize.getunit()); System.out.println("-current : " + totalsize.getcurrent()); System.out.println("-min size : " + totalsize.getlowwatermark()); System.out.println("-max size : " + totalsize.gethighwatermark()); // JVM Heap Size System.out.println("[Heap Size]"); System.out.println("-unit : " + heapsize.getunit()); System.out.println("-current : " + heapsize.getcurrent()); System.out.println("-min Size : " + heapsize.getlowwatermark()); System.out.println("-max Size : " + heapsize.gethighwatermark()); System.out.println("-lower bound : " + heapsize.getlowerbound()); System.out.println("-upper bound : " + heapsize.getupperbound()); // JVM UpTime System.out.println("[Up Time]"); System.out.println("-unit : " + uptime.getunit()); System.out.println("-count : " + uptime.getcount()); Appendix A. JMX 모니터링예제 27

System.out.println("-start time : " + uptime.getstarttime()); A.4. JDBC DataSource(DB Connection Pool) 모니터링예제 JDBC DataSource (DB Connection Pool) 모니터링예제는엔진컨테이너에존재하는 DB Connection Pool을모니터링하는예제이다. 여기에는 javax.management.remote.jmxconnector을이용하여 MBean Connection을얻는예제도함께포함되어있으며, 이예제는 JEUS_HOME\samples\jmx\monitoring에서제공하지않는다. 예제의내용은다음과같다. 특정엔진컨테이너의 MBeanServer로연결한다. jeus.management.j2ee.jdbcresourcembean을조회해서현재생성된 Connection Pool들의정보를주기적으로파일에남긴다. 참고 Connection Pool 은기동할때생성되지않고실제서비스호출시점에생성된다. 다음은 DB Connection Pool 모니터링예제이다. package monitoring; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.text.simpledateformat; import java.util.date; import java.util.hashtable; import java.util.iterator; import java.util.set; import javax.management.mbeanserverconnection; import javax.management.mbeanserverinvocationhandler; import javax.management.objectinstance; import javax.management.objectname; import javax.management.j2ee.statistics.jdbcconnectionpoolstats; import javax.management.j2ee.statistics.jdbcstats; import javax.management.remote.jmxconnector; import javax.naming.context; import javax.naming.initialcontext; import jeus.management.jmxconstants; 28 JEUS JMX 안내서

import jeus.management.j2ee.jdbcresourcembean; public class DBStatsClient { public static void main(string[] args) { String containername = "changeplz"; //e.g. node1_container1 Hashtable<String, Object> env = new Hashtable<String,Object>(); env.put(context.initial_context_factory, "jeus.jndi.jnscontextfactory"); env.put(context.url_pkg_prefixes, "jeus.jndi.jns.url"); env.put(context.provider_url, "localhost:9736"); MBeanServerConnection mbsc; try { InitialContext ctx = new InitialContext(env); JMXConnector connector = (JMXConnector)ctx.lookup( JMXConstants.JNDI_BINDING_PREFIX + containername); connector.connect(); mbsc = connector.getmbeanserverconnection(); catch (Exception e) { e.printstacktrace(); return; System.out.println("mbean server connection successfully established"); Set mbeans; try { ObjectName dbstats = new ObjectName("JEUS:j2eeType=JDBCResource,*"); mbeans = mbsc.querymbeans(dbstats, null); catch (Exception e) { e.printstacktrace(); return; System.out.println("Successfully get JDBCResource"); File file = new File(containerName+".log"); FileOutputStream stream = null; try { stream = new FileOutputStream(file); catch (IOException e) { e.printstacktrace(); return; while(true) { for (Iterator iter = mbeans.iterator();iter.hasnext();) { ObjectName jdbcresourcembeanname = ((ObjectInstance) iter.next()).getobjectname(); JDBCResourceMBean jdbcresource = (JDBCResourceMBean) MBeanServerInvocationHandler.newProxyInstance( Appendix A. JMX 모니터링예제 29

{ mbsc, jdbcresourcembeanname, JDBCResourceMBean.class, false); JDBCStats jdbcstats = (JDBCStats) jdbcresource.getstats(); SimpleDateFormat format = new SimpleDateFormat("[MM-dd]HH:mm:ss"); StringBuilder builder = new StringBuilder(); builder.append("[sta] "); for (JDBCConnectionPoolStats cpstats : jdbcstats.getconnectionpools()) String output =format.format(new Date(System.currentTimeMillis())) + " name:[" +cpstats.getjdbcdatasource() + "]" + " total:[" +cpstats.getpoolsize().getcurrent() +"]" + " use:[" + (cpstats.getpoolsize().getcurrent() - cpstats.getfreepoolsize().getcurrent()) +"] "; builder.append(output); builder.append("\n"); try { stream.write(builder.tostring().getbytes()); catch (IOException e) { e.printstacktrace(); return; try { Thread.sleep(10000); catch (InterruptedException e) { return; 30 JEUS JMX 안내서

용어해설 HTML adaptor HTML을지원하는 JMX의프로토콜어댑터이다. JMX Java Management Extensions의약자로, Java EE 환경에서의모니터링, 관리등을위한기술이다. JMX connector 원격에서 JMX MBeanServer에접근하기위한커넥터이다. JMX Remote API에정의되어있다. JMX protocol JMX 정보에접근할수있는통신방식을의미한다. JMX protocol adaptor JMX 접근에각종프로토콜접근방식을제공하기위한기술이다. MBean Managed Bean의약자이다. JMX를통하여접속할수있는 object로서, 각종관리에관련된정보등을담고있다. 이 MBean은 MBean 서버에등록되어사용된다. SNMP adaptor SNMP를지원하는 JMX의프로토콜어댑터이다. 용어해설 31

색인 Symbols <export-name>, 7 <jmx-connector>, 6, 7 <jmxmp-connector-port>, 6 <rmi-connector-port>, 7 <rmi-connector>, 7 A ACL, 17 H html-adaptor-port, 8 J JEUS JMX Manager, 5 JEUS 유틸리티, 12 jmx-manager, 5, 8 JMXMP Connector, 6 M MBeanServer, 11 R RemoteMBeanServerFactory, 11, 12 RMI Connector, 6 S snmp-adaptor-port, 8 snmp-max-packet, 9 snmp-security, 9 snmp-version, 8 색인 33