jeus jmx 안내서 · 2019-04-09 · jmx manager 설정화면은 다음의 3가지의 관리...

46
JEUS JMX 안내서 JEUS v7.0 Fix#1 Copyright © 2013 TmaxSoft Co., Ltd. All Rights Reserved.

Upload: others

Post on 02-Jun-2020

29 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

JEUS

JMX 안내서

JEUS v7.0 Fix#1

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

Page 2: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

Copyright Notice

Copyright © 2013 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 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

Some modules or files of this product are subject to the terms of the following licenses. : APACHE2.0, CDDL1.0,

EDL1.0, OPEN SYMPHONY SOFTWARE1.1, TRILEAD-SSH2, Bouncy Castle, BSD, MIT, SIL OPEN FONT1.1

Detailed Information related to the license can be found in the following directory : ${INSTALL_PATH}/lib/licenses

본 제품의 일부 파일 또는 모듈은 다음의 라이선스를 준수합니다. : APACHE2.0, CDDL1.0, EDL1.0, OPEN SYM

PHONY SOFTWARE1.1, TRILEAD-SSH2, Bouncy Castle, BSD, MIT, SIL OPEN FONT1.1

관련 상세한 정보는 제품의 다음의 디렉터리에 기재된 사항을 참고해 주십시오. : ${INSTALL_PATH}/lib/licenses

안내서 정보

안내서 제목: JEUS JMX 안내서

발행일: 2013-04-30

소프트웨어 버전: JEUS v7.0 Fix#1

안내서 버전: v2.1.2

Page 3: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

내용 목차

안내서에 대하여 .......................................................................................................................... vii

제1장 MBean 정보 조회 .............................................................................................................. 1

1.1. WebAdmin 사용 ........................................................................................................... 1

1.2. 콘솔 툴 사용 ................................................................................................................. 2

제2장 JMX Manager 환경설정 .................................................................................................... 5

2.1. 개요 ............................................................................................................................ 5

2.2. 기본 정보 설정 ............................................................................................................. 7

2.3. JMX Connector 설정 ..................................................................................................... 8

2.3.1. JMXMP Connector ............................................................................................ 9

2.3.2. RMI Connector .................................................................................................. 9

2.4. SNMP Adaptor 설정 ................................................................................................... 10

제3장 JMX 애플리케이션 개발 ................................................................................................... 11

3.1. JMX 애플리케이션 구조 .............................................................................................. 11

3.2. MBean 서버 연결 ....................................................................................................... 12

3.2.1. JEUS 유틸리티 사용 ........................................................................................ 12

3.2.2. JNDI 사용 ....................................................................................................... 14

3.2.3. JMX Remote API 사용 ..................................................................................... 16

3.3. Security 설정 .............................................................................................................. 19

3.4. MBean Object Names ................................................................................................. 20

Appendix A. JMX 모니터링 예제 ............................................................................................... 23

A.1. Servlet Thread Info 모니터링 예제 ............................................................................... 23

A.2. Thread Pool Info 모니터링 예제 ................................................................................... 26

A.3. JVM Info 모니터링 예제 .............................................................................................. 28

A.4. JDBC DataSource(DB Connection Pool) 모니터링 예제 ................................................ 29

색인 ............................................................................................................................................ 33

JEUS iii

Page 4: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본
Page 5: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

그림 목차

[그림 1.1] MBean 정보 조회 화면 ................................................................................................. 1

[그림 1.2] MBean 정보 조회 결과 ................................................................................................. 2

[그림 2.1] 메인화면 ..................................................................................................................... 5

[그림 2.2] Server 목록화면 .......................................................................................................... 6

[그림 2.3] Jmx Manager 설정화면 ................................................................................................ 6

[그림 2.4] Jmx Manager 기본 정보 설정 ........................................................................................ 7

[그림 2.5] HTML Adaptor 접속 화면 .............................................................................................. 8

[그림 2.6] JMXMP Connector 설정 ............................................................................................... 9

[그림 2.7] RMI Connector 설정 ..................................................................................................... 9

[그림 2.8] SNMP Adaptor 설정 ................................................................................................... 10

JEUS v

Page 6: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본
Page 7: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

안내서에 대하여

안내서의 대상

본 안내서는 JEUS에서 JMX를 관리하고, 유지하는 시스템 관리자나 관계자를 대상으로 JEUS JMX 모듈

을 사용하기 위한 내용을 설명한다.

안내서의 전제 조건

본 안내서를 원활하게 이해하기 위해서는 다음과 같은 사항을 미리 알고 있어야 한다.

● JEUS의 웹 서비스에 대한 이해 ("JEUS Web Service 안내서" 참고)

● JMX 개발에 대한 기본 지식 (http://www.oracle.com/technetwork/java/index.html에서 스펙이나 기타

JMX 관련 문서 참고)

안내서의 제한 조건

본 안내서에서는 Java EE나 JMX 기술에 대한 기본적인 내용은 다루지 않는다. 따라서 해당 내용은 Java

관련 문서를 참고한다.

안내서에 대하여 vii

Page 8: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

안내서 구성

본 안내서는 총 3개의 장과 1개의 Appendix로 구성되어 있다.

● “제1장 MBean 정보 조회”

현재 JEUS에 등록되어 있는 MBean을 조회하는 방법을 설명한다.

● “제2장 JMX Manager 환경설정”

JEUS 환경설정 방법에 대해서 설명한다.

● “제3장 JMX 애플리케이션 개발”

JEUS JMX 클라이언트 애플리케이션을 개발하는 방법과 그것을 설치하는 방법에 대해서 설명한다.

● “Appendix A. JMX 모니터링 예제”

JEUS MBean 정보를 모니터링하는 예제를 설명한다.

viii JEUS JMX 안내서

Page 9: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

안내서 규약

의미표기

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

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

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

강조진하게

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

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

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

메뉴의 진행 순서>

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

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

참고 또는 주의사항참고

주의할 사항주의

그림 이름[그림 1.1]

표 이름[표 1.1]

Java 코드, XML 문서AaBbCc123

옵션 파라미터[ command argument ]

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

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

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

안내서에 대하여 ix

Page 10: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

시스템 사용 환경

본 안내서의 모든 예제와 환경 구성은 UNIX의 스타일에 준하여 작성되어 Microsoft Windows™(이하

Windows)와 같이 다른 환경에서 작업하는 경우 몇 가지 사항을 고려해야 한다.

예를 들어 경로 구분자의 경우 UNIX 스타일인 “/” 를 Windows 스타일인 “\”로 바꿔서 사용한다. 또한 환경

변수도 Windows 스타일로 변경해서 사용하면 된다.

문서의 내용은 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 6 Specification

● Java EE management 1.1 Specification

● JMX 1.2 Specification

● JMX Remote API 1.0 Specification

x JEUS JMX 안내서

Page 11: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

연락처

Korea

TmaxSoft Co., Ltd

272-6, Seohyeon-dong, Bundang-gu,

Seongnam-si, Gyeonggi-do, 463-824

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

안내서에 대하여 xi

Page 12: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 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

xii JEUS JMX 안내서

Page 13: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

제1장 MBean 정보 조회

본 장에서는 WebAdmin과 콘솔 툴(jeusadmin)로 JEUS에서 사용하고 있는 MBean의 정보를 조회하는 방

법에 대해서 설명한다.

1.1. WebAdmin 사용WebAdmin를 사용하여 MBean 정보를 조회할 수 있다.

왼쪽 메뉴에서 [Monitoring] > [MBean] 메뉴를 선택하면 MBean 정보를 조회하는 화면이 나타난다.

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

제1장 MBean 정보 조회 1

Page 14: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

MBean 정보 조회 화면에서 조회할 서버를 선택하면 조회 결과 화면이 나타난다.

[그림 1.2] MBean 정보 조회 결과

1.2. 콘솔 툴 사용콘솔 툴(jeusadmin)을 사용해서 MBean 정보를 조회할 수 있다.

jeusadmin 툴을 통해 JEUS 서버에 접속한 후 mbean-info 명령어를 이용하면 다음과 같이 등록된 MBean

정보를 조회할 수 있다.

JEUS7 Administration Tool

[DAS]domain1.adminServer>mbean-info -server adminServer

ObjectName of MBeans on the server [adminServer]

================================================================================

+------------------------------------------------------------------------------+

| ObjectName of MBean |

+------------------------------------------------------------------------------+

| JEUS:j2eeType=JeusService,jeusType=SecuritySubject,JMXManager=adminServer,J2E|

|EDomain=domain1,SecurityDomain=SYSTEM_DOMAIN,name=Subject |

| JEUS:j2eeType=JeusService,jeusType=EJBEngine,JMXManager=adminServer,J2EEServe|

|r=adminServer,name=adminServer_ejb |

. . .

| JEUS:j2eeType=JMSResource,JMXManager=adminServer,J2EEServer=adminServer,name=|

|adminServer_jms |

| JEUS:j2eeType=JeusService,jeusType=ThreadPool_WEBC,JMXManager=adminServer,Web|

|Engine=adminServer_servlet,J2EEServer=adminServer,WebListener=ADMIN-HTTP,name=|

2 JEUS JMX 안내서

Page 15: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

|ADMIN-HTTP |

+------------------------------------------------------------------------------+

================================================================================

[DAS]domain1.adminServer>

제1장 MBean 정보 조회 3

Page 16: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본
Page 17: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

제2장 JMX Manager 환경설정

본 장에서는 JMX Manager의 환경을 설정하는 방법에 대해서 설명한다.

2.1. 개요JMX Remote API 스펙 1.0을 따르는 클라이언트 애플리케이션에게 JEUS JMX는 JEUS의 구성과 실시간

정보를 제공한다.

WebAdmin 메인화면에서 설정을 변경할 Server 이름을 선택하거나, 왼쪽 메뉴에서 [Servers] 메뉴를 선

택한 후 조회되는 Server 목록화면에서 서버를 선택한다.

[그림 2.1] 메인화면

제2장 JMX Manager 환경설정 5

Page 18: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

[그림 2.2] Server 목록화면

설정을 변경할 서버를 선택한 후 [Resource] 탭에서 [Jmx Manager] 메뉴를 선택하면, 다음과 같이 Jmx

Manager 설정화면이 나타난다.

[그림 2.3] Jmx Manager 설정화면

6 JEUS JMX 안내서

Page 19: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공

한다.

● 기본 정보 설정

HTML Adaptor Port와 MLet URL 정보를 설정한다.

● JMX Connector

다른 프로세스에서 해당 서버의 JMX를 액세스할 때 사용하는 JMX Connector를 설정한다. 기본적으로

는 JMXMP Connector를 사용한다.

● SNMP Adaptor

JMX의 Adaptor 중 하나인 SNMP Adaptor를 설정한다.

JMX Connector와 SNMP Adaptor은 해당 항목의 체크박스를 선택해야 설정 항목이 활성화된다. 각 항목

에 대한 자세한 설정 방법은 해당 절의 설명을 참고한다.

2.2. 기본 정보 설정본 절에서는 Jmx Manager 기본 정보를 설정하는 방법에 대해서 설명한다. 'Html Adaptor Port'와 'MLet

Url' 항목을 설정하는 경우 서버를 재시작해야 한다.

[그림 2.4] Jmx Manager 기본 정보 설정

● HTML Adaptor Port

HTML Adaptor는 HTML을 지원하는 JMX의 Protocol Adapter이다.

HTML Adaptor Port는 HTML Adapter의 Listener Port로 웹 브라우저로 접속할 HTML Adapter의 Port를

지정한다. Port를 -1로 설정을 하면 JMX Manager가 HTML Protocol을 사용하지 않음을 의미한다. Port

를 설정할 때 다른 서비스가 사용하는 Port를 사용하지 않도록 주의해서 설정한다.

HTML Adaptor 설정이 정상적으로 이루어졌는지 확인하려면, 웹 브라우저를 실행한 후 서버 IP와 설정

한 Port 값을 사용해 서버에 접속해 본다.

다음은 HTML 어댑터가 정상적으로 동작하고 있는 경우의 접속 화면이다.

제2장 JMX Manager 환경설정 7

Page 20: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

[그림 2.5] HTML Adaptor 접속 화면

참고

HTML Adaptor에 대한 추가적인 사항은 http://java.sun.com/developer/technicalArticles/J2SE/jmx.html

의 설명을 참고한다.

● MLet URL

서버의 MBean 서버에 등록할 MLet URL을 설정한다. 설정한 MLet URL을 적용하기 위해서는 서버를

재시작해야 한다.

참고

MLet에 대한 자세한 설명은 http://docs.oracle.com/javaee/1.4/api/javax/management/loading/MLet.html

의 설명을 참고한다.

2.3. JMX Connector 설정JMX Connector는 JMX Remote API에서 정의되어 있는 리모트에서 JMX MBeanServer에 접근하기 위한

Connector로 제공되는 Connector는 다음과 같다.

● 소켓 기반의 JMXMP Connector

● Remote API에 정의되어 있는 RMI Connector

기본적으로 JMXMP Connector를 사용하며, WebAdmin을 사용해서 설정을 변경할 수 있다.

8 JEUS JMX 안내서

Page 21: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

2.3.1. JMXMP Connector

JMX를 액세스할 때 사용할 리스너를 지정한다. 지정하지 않은 경우 기본 통합 포트 리스너를 JMXMP

Connector를 위해 사용한다.

다음 'Listener Ref '항목에 사용할 리스너 이름을 설정한다.

[그림 2.6] JMXMP Connector 설정

참고

JMXMP Connector 설정을 반영하기 위해서는 서버를 재시작해야 한다. 리스너 설정에 관한 자세한

내용은 “JEUS Server 안내서”의 “2.3.2. Listener 설정”을 참고한다.

2.3.2. RMI Connector

RMI Connector를 설정하기 위해서 'Rmi Connector' 를 체크해야 항목 설정이 활성화된다.

JMXMP Connector와 같이 설정되어 있는 경우에는 JEUS 시스템 내부적으로 JMXMP Connector를 사용

하게 된다. 이 경우에는 'Ref Export Name'(Reference Export Name)이 별도로 설정되어 있어야 한다.

Reference Export Name이 JEUS에서 기본적으로 사용하는 이름과 같거나 설정이 되어있지 않다면 Excep

tion이 발생한다.

다음은 WebaAdmin에서 RMI Connector를 설정하는 화면이다.

[그림 2.7] RMI Connector 설정

참고

RMI Connector 설정을 반영하기 위해서는 서버를 재시작해야 한다.

제2장 JMX Manager 환경설정 9

Page 22: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

RMI Connector 설정이 정상적으로 반영되어 서버를 시작할 때 다음과 같은 로그를 확인할 수 있다.

'Export Name'을 'RMIConnector'로 설정하고, 'Rmi Connector Port'를 '9999'로 설정했을 때 출력하는

로그 메시지이다. IP 주소는 실행하는 머신에 따라 달라질 수 있다.

. . .

[2012.06.27 15:03:57][2] [adminServer-1] [JMX-0132] The RMIConnector service url is

service:jmx:rmi://127.0.0.1:9999/jndi/RMIConnector

. . .

2.4. SNMP Adaptor 설정SNMP Adaptor는 JMX가 제공하는 SNMP Protocol Adapter이다. 'Snmp Adaptor'를 체크해야 항목 설정

이 활성화된다.

다음은 WebAdmin에서 SNMP Adaptor를 설정하는 화면이다.

[그림 2.8] SNMP Adaptor 설정

참고

SNMP와 SNMP Adaptor 설정에 대한 자세한 설명은 “JEUS SNMP 안내서”의 “제2장 SNMP Agent

설정”을 참고한다.

10 JEUS JMX 안내서

Page 23: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

제3장 JMX 애플리케이션 개발

JEUS 모니터링 서비스를 사용하기 위한 JEUS JMX 클라이언트 애플리케이션의 개발 및 설치 방법에 대

해서 설명한다.

3.1. JMX 애플리케이션 구조

애플리케이션의 구조는 필요에 따라 다양한 형태가 있다. JEUS JMX 클라이언트 애플리케이션은 일반적

인 구조로 구성되어 있고, 구성된 구조를 따라 수행한다.

다음은 JMX 클라이언트 애플리케이션의 수행 구조 및 과정이다.

1. 환경설정(옵션 사항)

JMX 클라이언트 애플리케이션을 위해 환경을 설정한다. 환경설정을 MBeanServer에 연결하기 전에

할 수 있다. 처리하려는 MBean을 질의하고, 그 결과를 받아서 처리할 수 있다.

기본적인 환경설정에 대한 자세한 내용은 “제2장 JMX Manager 환경설정”의 내용을 참고한다.

2. MBean 서버 연결

MBean 서버로 접속하기 위한 방법은 다음과 같다.

– jeus.management.RemoteMBeanServerFactory는 JEUS 유틸리티를 사용한다.

– JNDI에 등록되어 있는 reference를 사용한다.

– JMX Remote javax.management.remote.JMXServiceURL을 사용하여 javax.management.remote.JMX

Connector를 얻을 수 있다.

각 방법에 대한 자세한 내용은 각 절의 설명을 참고한다.

3. 질의

4. 질의 결과 처리

그 외에 JEUS 모니터링 서비스를 위한 보안 설정 방법과 JEUS JMX에서 ObjectName을 생성하는 규칙

에 대해서 설명한다. 또한 JEUS 모니터링은 SNMP를 사용할 수도 있다. 사용 방법에 대한 자세한 내용은

"JEUS SNMP 안내서"를 참고한다.

참고

본 장에서 설명하는 내용을 이해하기 위해서 JMX Remote API 1.0과 Java EE Management 스펙에

대한 기본 지식이 필요하다. JMX Remote API에 대한 자세한 정보는 Oracle에서 제공하는 J2EE JMX

Remote API 1.0 스펙과 JMX Remote API를 참고한다.

제3장 JMX 애플리케이션 개발 11

Page 24: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

3.2. MBean 서버 연결본 절에서는 MBean 서버로 접속하기 위한 방법에 대해서 설명한다.

3.2.1. JEUS 유틸리티 사용

본 절에서는 JEUS 유틸리티 클래스인 jeus.management.RemoteMBeanServerFactory를 사용해서 JEUS

를 모니터링하는 JMX 애플리케이션에 대해서 설명한다. "MBean 서버 연결" 부분이 다른 방법과 차이가

있다.

다음은 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 25: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 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());

}

}

}

"MBean 서버 연결"에서 JEUS가 제공하는 JEUS 유틸리티 클래스인 jeus.management.RemoteM

BeanServerFactory를 사용했다. 이 클래스를 사용하면 간단하게 MBeanServerConnection을 얻을 수 있

다.

위 예제를 작성한 후 컴파일하여 실행하면 JEUS 서버에 접속한 후 "JEUS:*"에 해당하는 MBean들의 목

록을 출력한다. 예제 프로그램은 인자를 3개 받는데, 첫 번째는 서버의 hostname, 두 번째는 JEUS 사용자

이름, 마지막은 비밀번호이다.

user1@host1:~$ java -classpath .:$JEUS_HOME/lib/client/jclient.jar

jmxclient.JMXClientUsingJeusUtility 127.0.0.1 administrator jeus

[2012.06.27 15:42:45][2] [t-1] [Network-0405] [Endpoint] exporting Endpoint

(0:61.77.153.227:9756:-1:0x2CAD872D).

[2012.06.27 15:42:45][2] [t-1] [Network-0002] [Acceptor] start to listen

NonBlockingChannelAcceptor: /61.77.153.227:9756.

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=adminServer,

J2EEServer=adminServer,name=threadpool.System

[MBean] JEUS:j2eeType=JeusService,jeusType=JEUSMPConnector,

JMXManager=adminServer,J2EEServer=adminServer,name=adminServer

[MBean] JEUS:j2eeType=JeusService,jeusType=JMSDestinationResource,

JMXManager=adminServer,J2EEServer=adminServer,JMSResource=adminServer_jms,

name=ExamplesQueue

[MBean] JEUS:j2eeType=WebModule,JMXManager=adminServer,

J2EEServer=adminServer,J2EEApplication=null,WebEngine=adminServer_servlet,name=webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=SessionContainer,JMXManager=adminServer,

WebEngine=adminServer_servlet,J2EEServer=adminServer,name=_webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=adminServer,

J2EEServer=adminServer,name=AsyncServletBackgroundProcessor-webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=JeusLogService,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool_WEBC,JMXManager=adminServer,

WebEngine=adminServer_servlet,J2EEServer=adminServer,WebListener=http1,name=http1

[MBean] JEUS:j2eeType=JeusService,jeusType=SecurityDomain,JMXManager=adminServer,

J2EEDomain=domain1,SecurityService=SecurityService,name=SYSTEM_DOMAIN

[MBean]

제3장 JMX 애플리케이션 개발 13

Page 26: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

JEUS:j2eeType=JeusService,jeusType=JMSConnectionFactoryResource,JMXManager=adminServer,

J2EEServer=adminServer,JMSResource=adminServer_jms,name=TopicConnectionFactory

[MBean] JEUS:j2eeType=JeusService,jeusType=SnmpAgentService,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

. . .

참고

예제 프로그램은 jclient.jar가 있어야 실행할 수 있다. 기본적으로 jclient.jar는 JEUS_HOME/lib/client

아래에 위치한다.

3.2.2. JNDI 사용

본 절에서는 JNDI를 사용해서 JEUS를 모니터링하는 JMX 애플리케이션에 대해서 설명한다. "MBean 서

버 연결" 부분이 다른 방법과 차이가 있다.

다음은 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];

String username = args[1];

String password = args[2];

14 JEUS JMX 안내서

Page 27: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

// targetName could be server name,

// for example, "adminServer", "server1"

String targetName = args[3];

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);

// Step 2. Getting MBeanServerConnection

InitialContext ctx = new InitialContext(env);

JMXConnector 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());

}

}

}

JNDI에서 Lookup할 때에는 등록되어 있는 Connector(RMI Connector/JMXMP Connector)의 종류에 관계

없이 같은 방식으로 사용이 가능하다. Lookup할 때 사용하는 Export Name은 여기서는 JEUS에서 사용하

는 기본 naming 방식을 사용했다. 이 방식은 JNDI context mgmt/rmbs/<server-name> 형태의 이름을 사

용한다.

위 예제를 작성한 후 컴파일하여 실행하면 JEUS 서버에 접속한 후 "JEUS:*"에 해당하는 MBean들의 목

록을 출력한다. 예제 프로그램은 인자를 4개 받는데, 첫 번째는 서버의 hostname, 두 번째는 JEUS 사용자

이름, 세 번째는 비밀번호, 마지막은 서버 이름이다.

user1@host1:~$ java -classpath .:$JEUS_HOME/lib/client/jclient.jar

jmxclient.JMXClientUsingJndi 127.0.0.1 jeus jeus adminServer

[2012.06.27 15:42:45][2] [t-1] [Network-0405] [Endpoint] exporting Endpoint

(0:61.77.153.227:9756:-1:0x2CAD872D).

[2012.06.27 15:42:45][2] [t-1] [Network-0002] [Acceptor] start to listen

NonBlockingChannelAcceptor: /61.77.153.227:9756.

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,

JMXManager=adminServer,J2EEServer=adminServer,name=threadpool.System

[MBean] JEUS:j2eeType=JeusService,jeusType=JEUSMPConnector,

JMXManager=adminServer,J2EEServer=adminServer,name=adminServer

제3장 JMX 애플리케이션 개발 15

Page 28: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

[MBean] JEUS:j2eeType=JeusService,jeusType=JMSDestinationResource,

JMXManager=adminServer,J2EEServer=adminServer,JMSResource=adminServer_jms,name=ExamplesQueue

[MBean] JEUS:j2eeType=WebModule,JMXManager=adminServer,J2EEServer=adminServer,

J2EEApplication=null,WebEngine=adminServer_servlet,name=webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=SessionContainer,JMXManager=adminServer,

WebEngine=adminServer_servlet,J2EEServer=adminServer,name=_webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=adminServer,

J2EEServer=adminServer,name=AsyncServletBackgroundProcessor-webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=JeusLogService,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool_WEBC,JMXManager=adminServer,

WebEngine=adminServer_servlet,J2EEServer=adminServer,WebListener=http1,name=http1

[MBean] JEUS:j2eeType=JeusService,jeusType=SecurityDomain,JMXManager=adminServer,

J2EEDomain=domain1,SecurityService=SecurityService,name=SYSTEM_DOMAIN

[MBean] JEUS:j2eeType=JeusService,jeusType=JMSConnectionFactoryResource,

JMXManager=adminServer,J2EEServer=adminServer,JMSResource=adminServer_jms,name=TopicConnectionFactory

[MBean] JEUS:j2eeType=JeusService,jeusType=SnmpAgentService,

JMXManager=adminServer,J2EEServer=adminServer,name=adminServer

. . .

그 외에 RMI Connector의 경우에는 JMXMP Connector가 별도로 띄워져 있는 경우에 기본 방식 이외의

이름을 reference export name으로 지정할 수 있다.

참고

1. 예제 프로그램은 jclient.jar가 있어야 실행할 수 있다. 기본적으로 jclient.jar는 JEUS_HOME/lib/client

아래에 위치한다.

2. RMI Connector 설정의 자세한 내용은 “2.3.2. RMI Connector”를 참고한다.

3. JNDI의 자세한 정보에 대해서는 “JEUS Server 안내서”의 “제4장 JNDI Naming Server”를 참고한

다. 만약에 JMX 애플리케이션이 서블릿 또는 EJB에서 실행된다면 JNDI 파라미터에 대한 설정은 필

요하지 않다.

3.2.3. JMX Remote API 사용

본 절에서는 JMX Remote API를 사용해서 JEUS를 모니터링하는 JMX 애플리케이션에 대해서 설명한다.

"MBean 서버 연결" 부분이 다른 방법과 차이가 있다.

다음은 JMX Remote API를 사용하는 클라이언트 예제이다.

package jmxclient;

import java.util.Set;

import java.util.Iterator;

import java.util.Hashtable;

16 JEUS JMX 안내서

Page 29: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

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

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

제3장 JMX 애플리케이션 개발 17

Page 30: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

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();

}

}

}

참고

JMX Remote API를 사용하기 위해서는 JMX Manager에 있는 'RMI Connector' 항목을 설정해야 한

다. RMI Connector 설정에 대한 자세한 내용은 “2.3.2. RMI Connector”를 참고한다.

위 예제를 작성한 후 컴파일하여 실행하면 JEUS 서버에 접속한 후 "JEUS:*"에 해당하는 MBean들의 목

록을 출력한다. 예제 프로그램은 인자를 4개 받는데, 첫 번째는 서버의 hostname, 두 번째는 JEUS 사용자

이름, 세 번째는 비밀번호, 마지막은 RMI Connector ExportName이다.

다음 실행 결과에서는 'ExportName'을 'RMIConnector'로 설정한 경우이다.

user1@host1:~$ java -classpath .:$JEUS_HOME/lib/client/jclient.jar

jmxclient.JMXClientUsingJmxUrl 127.0.0.1 jeus jeus RMIConnector

[2012.06.27 15:42:45][2] [t-1] [Network-0405] [Endpoint] exporting Endpoint

(0:61.77.153.227:9756:-1:0x2CAD872D).

[2012.06.27 15:42:45][2] [t-1] [Network-0002] [Acceptor] start to listen

NonBlockingChannelAcceptor: /61.77.153.227:9756.

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=adminServer,

J2EEServer=adminServer,name=threadpool.System

[MBean] JEUS:j2eeType=JeusService,jeusType=JEUSMPConnector,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

[MBean] JEUS:j2eeType=JeusService,jeusType=JMSDestinationResource,

JMXManager=adminServer,J2EEServer=adminServer,JMSResource=adminServer_jms,name=ExamplesQueue

[MBean] JEUS:j2eeType=WebModule,JMXManager=adminServer,J2EEServer=adminServer,

J2EEApplication=null,WebEngine=adminServer_servlet,name=webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=SessionContainer,JMXManager=adminServer,

WebEngine=adminServer_servlet,J2EEServer=adminServer,name=_webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=adminServer,

J2EEServer=adminServer,name=AsyncServletBackgroundProcessor-webadmin

[MBean] JEUS:j2eeType=JeusService,jeusType=JeusLogService,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

[MBean] JEUS:j2eeType=JeusService,jeusType=ThreadPool_WEBC,JMXManager=adminServer,

18 JEUS JMX 안내서

Page 31: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

WebEngine=adminServer_servlet,J2EEServer=adminServer,WebListener=http1,name=http1

[MBean] JEUS:j2eeType=JeusService,jeusType=SecurityDomain,JMXManager=adminServer,

J2EEDomain=domain1,SecurityService=SecurityService,name=SYSTEM_DOMAIN

[MBean] JEUS:j2eeType=JeusService,jeusType=JMSConnectionFactoryResource,

JMXManager=adminServer,J2EEServer=adminServer,JMSResource=adminServer_jms,name=TopicConnectionFactory

[MBean] JEUS:j2eeType=JeusService,jeusType=SnmpAgentService,JMXManager=adminServer,

J2EEServer=adminServer,name=adminServer

. . .

참고

예제 프로그램은 jclient.jar가 있어야 실행할 수 있다. 기본적으로 jclient.jar는 JEUS_HOME/lib/client

아래에 위치한다.

3.3. Security 설정JMX를 사용하여 JEUS 서버에 등록되어 있는 여러 MBean들이 제공하는 속성을 읽거나 작업할 경우 JEUS

는 해당 연결을 맺은 사용자가 속성을 읽을 권한이 있는지 작업을 수행할 권한이 있는지를 검사한다. 각각

MBean을 사용할 때 필요한 권한에 대한 정보는 JEUS API 문서를 참고한다.

API 문서는 다음 위치에서 찾을 수 있다.

JEUS_HOME/docs/api

참고

API 문서는 MBean을 사용할 때 필요한 권한(Permission Name)뿐만 아니라 ObjectNamePattern, 속

성(Attribute), 작업(Operation) 등에 대한 정보도 제공하고 있다.

JMX 애플리케이션에서 사용자 이름이나 비밀번호와 같은 정보는 서버에 접속해서 MBeanServerConnection

을 생성할 때 제공한다. 일반적으로 MBeanServerConnection을 생성할 때는 다음과 같은 코드를 사용하

는데, 코드를 살펴보면 Hashtable로 전달하는 환경설정 정보에 사용자 이름과 비밀번호가 들어가는 것을

확인할 수 있다.

. . .

JMXServiceURL serviceURL =

new JMXServiceURL("service:jmx:jmxmp://127.0.0.1:9999/adminServer");

Map<String, Object> env = new HashMap<String, Object>();

env.put(Context.SECURITY_PRINCIPAL, id);

env.put(Context.SECURITY_CREDENTIALS, password);

env.put(Context.INITIAL_CONTEXT_FACTORY, "jeus.jndi.JEUSContextFactory");

env.put("jmx.remote.x.request.timeout", "10");

제3장 JMX 애플리케이션 개발 19

Page 32: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

JMXConnector connector = JMXConnectorFactory.connect(serviceURL, env);

MBeanServerConnection connection = connector.getMBeanServerConnection();

. . .

이때 사용하는 사용자 이름과 비밀번호, 권한 설정은 JEUS Security를 이용해서 설정한다. JEUS Security

설정 방법에 대한 자세한 내용은 “JEUS Security 안내서”의 “2.5. 보안 시스템 사용자 정보 설정”과 “JEUS

Security 안내서”의 “2.6. 보안 시스템 정책 설정”을 참고한다.

3.4. MBean Object NamesObjectName은 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>],

JMXManager = <JMXManager_value> [,*]

또는

<domain_name>: *

ObjectName은 <domain_name>으로 시작해야 하고, 각 이름과 값의 짝이 순차적으로 규정되지 않는다.

예를 들면, 다음은 둘 다 JEUS 도메인 MBean의 objectname을 얻어온다.

JEUS:j2eeType=J2EEDomain,JMXManager=adminServer, *

JEUS:JMXManager=adminServer, j2eeType=J2EEDomain, *

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

● <domain_name>

– ObjectName의 도메인 이름으로 값은 'JEUS'이다.

● j2eeType

– MBean은 J2EE 타입이며, J2EE Management 스펙에 의해 기술된다.

– 다음 값들 중 하나를 설정한다.

EntityBeanEJBModuleAppClientModule

J2EEServerJ2EEDomainJ2EEApplication

JCAManagedConnectionFactoryJCAConnectionFactoryJAXRResource

JDBCDriverJDBCDataSourceJCAResource

20 JEUS JMX 안내서

Page 33: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

JNDIResourceJMSResourceJDBCResource

JavaMailResourceJVMJTAResource

ResourceAdaptorMessageDrivenBeanJeusService

StatefulSessionBeanServletResourceAdapterModule

WebModuleURLResourceStatelessSessionBean

● name

– MBean의 이름으로 각각의 MBean Object에는 유일한 값이 있다.

예를 들면 "adminServer"라는 서버가 실행하는 JVM의 이름은 'adminServer'이다.

● parent-j2eeType

– MBean의 상위 J2EE 타입으로 각 MBean들에 계층이 규정되어 있다.

예를 들면 "JDBCDriver"의 상위 J2EE 타입은 'JDBCDataSource'이다.

● jeusType

– JEUS JMX에서 정의된 MBean들의 타입이다. "JeusService" J2EE 타입만 몇 가지 jeusType을 가질

수 있다.

– 다음 값들 중 하나를 설정한다.

JMSConnectionFactoryResourceJMSClientResourceEJBEngine

JMSEngineJMSDurableSubscriberResourceJMSDestinationResource

SecurityDomainJMSServiceChannelJMSPersistenceStoreManager

SecuritySubjectSecurityServiceSecurityPolicy

SessionContainerP2PSessionContainerCentralSessionContainer

WebEngineThreadPool_WEBCThreadPool

WebServicesWebListener

● isTargetable

– 설정값은 blooean 타입으로 사용자 AP(EJB, 서블릿, JSP)가 디플로이되어 isTargetable 동작하는

MBean에서는 반드시 true로 설정되어야 한다.

● JMXManager

– MBean 서비스를 제공하는 JMXManager의 이름이다. 일반적으로 JMXManager 항목의 값은 해당

JMXManager가 속한 서버 이름과 동일하다.

제3장 JMX 애플리케이션 개발 21

Page 34: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본
Page 35: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

Appendix A. JMX 모니터링 예제

JEUS MBean 정보를 모니터링하는 4가지 중요한 예제를 설명한다.

● Servlet Thread Info 모니터링 예제

● ThreadPool Info 모니터링 예제

● JVM Info 모니터링 예제

● JDBC DataSource (DB Connection Pool) 모니터링 예제

설명하는 모든 예제에서 MBean 서버 정보를 조회할 때 RemoteMBeanServerFactory를 이용한다. MBean

서버를 얻어오는 다른 방법에 대한 자세한 내용은 “제3장 JMX 애플리케이션 개발”을 참고한다.

A.1. Servlet Thread Info 모니터링 예제Servlet Thread Info 모니터링 예제는 웹 컨테이너의 리스너의 정보, 특히 Thread Pool과 각 Thread에 대

한 정보를 모니터링한다.

이 예제를 통해 모니터링하는 정보는 다음과 같다.

● 현재 할당된 Worker Thread의 수(current thread count)

● Thread Pool을 유지하는 최대 Thread의 개수(max thread count)

● Wait-Queue에 적체된 클라이언트의 수(wait queue count)

다음은 Servlet Thread Info 모니터링 예제이다.

package monitoring;

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)

throws Exception {

Appendix A. JMX 모니터링 예제 23

Page 36: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

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 listeners from WebEngine

String[] listeners = engineMBean.getWebListeners();

if(listeners == null || listeners.length == 0){

return;

}

String webEngineName = engineMBean.getObjectName().getKeyProperty("name");

for(int i = 0; i < listeners.length; i++) {

ObjectName listener = new ObjectName(listeners[i]);

WebListenerMoMBean listenerMBean=

(WebListenerMoMBean) MBeanServerInvocationHandler.newProxyInstance

(mBeanServer, listener, WebListenerMoMBean.class, false);

String[] tpoolNames = listenerMBean.getThreadPools();

// Get stats from thread pools

if (tpoolNames != null) {

showThreadPoolStats(mBeanServer, webEngineName, tpoolNames);

24 JEUS JMX 안내서

Page 37: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

}

}

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());

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)");

Appendix A. JMX 모니터링 예제 25

Page 38: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

} else {

System.out.println("- wait queue count : "

+ stats.getWaitQueueCount().getCount());

}

System.out.println();

}

}

}

A.2. Thread Pool Info 모니터링 예제Thread Pool 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;

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 {

26 JEUS JMX 안내서

Page 39: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

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());

// 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());

}

Appendix A. JMX 모니터링 예제 27

Page 40: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

}

}

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;

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);

28 JEUS JMX 안내서

Page 41: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

// 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());

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을 얻는 예

제도 함께 포함되어 있다.

이 예제의 내용은 다음과 같다.

● 특정 서버의 MBean 서버로 연결한다.

● jeus.management.j2ee.JDBCResourceMBean을 조회해서 현재 생성된 Connection Pool들의 정보를

주기적으로 파일에 남긴다.

Appendix A. JMX 모니터링 예제 29

Page 42: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

참고

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;

import jeus.management.j2ee.JDBCResourceMBean;

public class DBStatsClient {

public static void main(String[] args) {

String serverName = "changeplz"; //e.g. server1

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 + serverName);

connector.connect();

mbsc = connector.getMBeanServerConnection();

} catch (Exception e) {

e.printStackTrace();

30 JEUS JMX 안내서

Page 43: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

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(serverName+".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(

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();

Appendix A. JMX 모니터링 예제 31

Page 44: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

return;

}

}

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

return;

}

}

}

}

32 JEUS JMX 안내서

Page 45: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본

색인

HHTML Adaptor Port, 7

JJDBC DataSource 모니터링 예제, 29

JEUS JMX Manager, 7

JEUS 유틸리티, 12

JMX Connector, 7

JMXMP Connector, 8

JVM Info 모니터링 예제, 28

MMBean 서버, 11

mbean-info, 2

MBeanServer, 11

MLet URL, 7, 8

RRemoteMBeanServerFactory, 11, 12

RMI Connector, 8

SServlet Thread Info 모니터링 예제, 23

SNMP Adaptor, 7

SNMP Adaptor 설정, 10

TThreadPool Info 모니터링 예제, 26

색인 33

Page 46: JEUS JMX 안내서 · 2019-04-09 · Jmx Manager 설정화면은 다음의 3가지의 관리 화면로 JEUS 모니터링 정보에 액세스하는 방법을 제공 한다. 기본