+ All Categories
Home > Documents > JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는...

JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는...

Date post: 02-Jun-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
48
JEUS JMX 안내서 JEUS v6.0 Fix#8 Copyright © 2011 TmaxSoft Co., Ltd. All Rights Reserved.
Transcript
Page 1: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

JEUS

JMX 안내서

JEUS v6.0 Fix#8

Copyright © 2011 TmaxSoft Co., Ltd. All Rights Reserved.

Page 2: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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

Page 3: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

내용 목차

안내서에 대하여 ........................................................................................................................... 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

Page 4: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 5: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

그림 목차

[그림 1.1] JEUS 노드 트리 ........................................................................................................... 2

[그림 1.2] MBean 정보 조회 화면 ................................................................................................. 3

JEUS v

Page 6: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 7: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

예 목차

[예 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

Page 8: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 9: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

안내서에 대하여

안내서의 대상

본 안내서는 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

Page 10: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

안내서 규약

의미표기

프로그램 소스 코드의 파일명<<AaBbCc123>>

Ctrl과 C를 동시에 누름<Ctrl>+C

GUI의 버튼 또는 메뉴 이름[Button]

강조진하게

다른 관련 안내서 또는 안내서 내의 다른 장 및 절 언급" "(따옴표)

화면 UI에서 입력 항목에 대한 설명'입력항목'

메일계정, 웹 사이트하이퍼링크

메뉴의 진행 순서>

하위 디렉터리 또는 파일 있음+----

하위 디렉터리 또는 파일 없음|----

참고 또는 주의사항참고

주의할 사항주의

그림 이름[그림 1.1]

표 이름[표 1.1]

Java 코드, XML 문서AaBbCc123

옵션 파라미터[ command argument ]

‘<’와 ‘>’ 사이의 내용이 실제 값으로 변경됨< xyz >

선택 사항. 예) A|B: A나 B 중 하나|

파라미터 등이 반복되어서 나옴…

x JEUS JMX 안내서

Page 11: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

시스템 사용 환경

본 안내서는 모든 예제와 환경 구성을 Microsoft Windows™의 스타일을 따랐다. UNIX와 같은 다른 환경

에서 작업하는 사람은 몇 가지 사항만 고려하면 별 무리없이 사용할 수 있다. 대표적인 것이 디렉터리 구

분자인데, Windows 스타일인 “\”를 UNIX 스타일인 “/”로 바꿔서 사용하면 무리가 없다. 이외에 환경변수도

UNIX 스타일로 변경해서 사용하면 된다.

그러나 Java 표준을 고려해서 문서를 작성했기 때문에, 대부분의 내용은 동일하게 적용된다.

관련 안내서

설명안내서

JEUS 시스템과 서버의 개요와 시스템 관리를 위한 안내서이다.JEUS Server 안내서

산업 표준인 SNMP 프로토콜을 이용한 JEUS 모니터링에 대해 설명한

안내서이다.

JEUS SNMP 안내서

JEUS의 웹 관리 툴인 WebAdmin을 사용한 JEUS 의 설정 및 제어, 모니

터링, 클러스터링, 리소스 설정 및 관리에 대해 기술한 안내서이다.

JEUS WebAdmin 안내서

JEUS 내의 웹 서비스에 대해 기술한 안내서이다.JEUS Web Service 안내서

JEUS를 사용할 때 도움이 되는 Reference를 기술한 안내서이다.JEUS Reference Book

JEUS관련 XML의 설정 방법에 대해 기술한 안내서이다.JEUS XML Reference

참고 자료

● Java EE 5 Specification

● Java EE management 1.1 Specification

● JMX 1.2 Specification

● JMX Remote API 1.0 Specification

안내서에 대하여 xi

Page 12: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

연락처

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: [email protected]

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: [email protected]

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: [email protected]

Web (Japanese): http://www.tmaxsoft.co.jp

xii JEUS JMX 안내서

Page 13: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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: [email protected]

Web (Chinese): http://www.tmaxsoft.com.cn

안내서에 대하여 xiii

Page 14: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 15: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

제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

Page 16: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

1.2. WebAdmin 사용WebAdmin에서는 jeusadmin 툴 보다 좀 더 풍부한 MBean 정보를 제공한다.

WebAdmin에서 MBean 정보를 조회하는 방법은 다음과 같다.

1. WebAdmin의 왼쪽 JEUS 노드 트리에서 [JEUS 모니터링] > [MBean 모니터링] 메뉴를 선택한다.

[그림 1.1] JEUS 노드 트리

2 JEUS JMX 안내서

Page 17: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

2. 다음과 같이 MBean 정보 조회 화면이 나타난다.

[그림 1.2] MBean 정보 조회 화면

MBean 정보 조회 화면에서는 MBean의 구조와 이름, ObjectName 뿐만 아니라, 각 MBean의 attribute와

operation에 대한 정보도 조회가 가능하다. 또한 통계 정보를 포함하고 있는 MBean에 대해서는 그 값을

그래프로 나타낸다.

참고

WebAdmin의 자세한 내용은 “JEUS WebAdmin 안내서”의 “제5장 모니터링”을 참고한다.

제1장 MBean 정보 조회 3

Page 18: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 19: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

제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

Page 20: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

참고

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 안내서

Page 21: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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

Page 22: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

</snmp-adaptor>

</jmx-manager>

다음은 기본으로 설정할 태그에 대한 설명이다.

설명태그

HTML 어댑터의 Listener Port로, 웹 브라우저로 접속할 HTML 어댑터의 Port

를 지정한다. -1로 설정을 하면 JMX Manager가 HTML 프로토콜을 사용하지

<html-adaptor-port>

않음을 의미한다. 다른 서비스가 사용하는 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 어댑터의 Listener Port로 SNMP 어댑터에 대한 설정은 선택 사양이

며, <snmp-adaptor-port>는 필수 입력 사항(mandatory)이다. 다른 서비스가

사용하는 Port를 사용하면 안 된다는 것을 유념한다.

<snmp-adaptor-port>

SNMP 버전을 지정하며 1, 2 또는 3을 지정할 수 있으며, 기본값은 3이다.<snmp-version>

8 JEUS JMX 안내서

Page 23: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

설명태그

SNMP 패킷에 대한 최대값을 설정하며 최소 256 Bytes부터 설정할 수 있다.

기본값은 4096이다.

<snmp-max-packet-size>

보안을 적용시킬 것인지를 설정한다. true 또는 false로 지정하며, 기본값은

false이다. true는 SNMP 버전 3에서만 지정이 가능하다.

<snmp-security>

제2장 JMX Manager 환경설정 9

Page 24: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 25: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

제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

Page 26: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 27: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

// 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

Page 28: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 29: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

참고

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 &lt; 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

Page 30: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 31: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

</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>{base64}MTExMTExMQ==</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

Page 32: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

<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. ObjectNameObjectName은 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 안내서

Page 33: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

다음은 각 항목에 대한 설명이다.

● <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

Page 34: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 35: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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

Page 36: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 &amp;&amp; groups.length &gt; 0) {

for (int i = 0; i &lt; 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 안내서

Page 37: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

// Get thread pools from the listeners

for (int j = 0; j &lt; 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 &lt; 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

Page 38: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 39: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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

Page 40: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

// 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 안내서

Page 41: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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

Page 42: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 43: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

import jeus.management.j2ee.JDBCResourceMBean;

public class DBStatsClient {

public static void main(String[] args) {

String containerName = "changeplz"; //e.g. node1_container1

Hashtable&lt;String, Object&gt; env = new Hashtable&lt;String,Object&gt;();

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

Page 44: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

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 안내서

Page 45: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

용어해설

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

Page 46: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.
Page 47: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

색인

Symbols<export-name>, 7

<jmx-connector>, 6, 7

<jmxmp-connector-port>, 6

<rmi-connector-port>, 7

<rmi-connector>, 7

AACL, 17

Hhtml-adaptor-port, 8

JJEUS JMX Manager, 5

JEUS 유틸리티, 12

jmx-manager, 5, 8

JMXMP Connector, 6

MMBeanServer, 11

RRemoteMBeanServerFactory, 11, 12

RMI Connector, 6

Ssnmp-adaptor-port, 8

snmp-max-packet, 9

snmp-security, 9

snmp-version, 8

색인 33

Page 48: JEUS JMX 안내서 - TmaxSoft · 2019-04-09 · JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간 정보를 제공해준다.

Recommended