IT_Programming/Dev Tools

[펌] Java SE 감시 및 관리의 개요

JJun ™ 2010. 12. 22. 10:11

-------------------------------------------------------------------------------------------------

출처: http://xrath.com/javase/ko/6/docs/ko/technotes/guides/management/overview.html

-------------------------------------------------------------------------------------------------

 

이 장에서는, Java Platform, Standard Edition (Java SE 플랫폼)에 감시와 관리의 양서비스를 제공하는 기능 및 유틸리티를 설명합니다. 여기서 소개하는 기능의 상세한 것에 대하여는, 이 가이드의 다음의 장을 참조해 주세요.

 

주된 감시 및 관리 기능

Java SE 플랫폼에는, 중요한 감시 및 관리 기능이 준비되어 있습니다. 이러한 기능은, 크고 4 개(살)로 분류됩니다.

  • Java 가상 머신 (Java VM)의 Instrumentation.

  • 감시 및 관리 어플리케이션 프로그래밍 인터페이스 (API).

  • 감시 및 관리툴.

  • Java Management Extensions (JMX) 테크놀러지.

이러한 감시 및 관리 기능의 분류에 대한 자세한 것은, 다음의 마디를 참조해 주세요.

 

Java VM Instrumentation

Java VM 는, 감시 및 관리를 목적으로 해 계측 되어 로컬 액세스나 원격 접근을 실현하는 편입형의 것 (또는, 추가 설정 불요 (아웃 오브 박스)인) 관리 기능을 유효하게 합니다. 자세한 것은,제 2 장 「JMX 테크놀러지를 사용하는 감시와 관리」제 5 장 「SNMP 감시와 관리」 를 참조해 주세요.

Java VM 에는, JMX 스펙에 준거한 관리 어플리케이션으로 사용되는 플랫폼 MBean 서버와 플랫폼 MBean 가 준비되어 있습니다. 이것들은, 감시 및 관리 API (다음의 마디에 기재)의 구현입니다. 플랫폼 MXBean 와 MBean 서버에 대해서는,Platform MXBeansPlatform MBean Server 를 참조해 주세요.

샘플 코드는,JDK_HOME/demo/management 디렉토리에 포함되고 있습니다. 여기서 JDK_HOME 는 Java Development Kit (JDK)가 인스톨 되고 있는 디렉토리입니다.

 

감시 및 관리 API

java.lang.management 패키지에서는, Java VM 의 감시 및 관리를 실시하는 인터페이스를 제공합니다. 이 API 에서는, 다음의 종류의 정보에 액세스 합니다.

  • 로드 된 클래스와 실행중의 thread의 수.

  • Java VM 의 가동 시간, 시스템 프로퍼티, VM 입력 인수.

  • thread 상태, thread 경합 통계, 라이브 thread의 스택 트레이스.

  • 메모리 소비.

  • 가베지 컬렉션의 통계.

  • low memory의 검출.

  • On Demand 데드락의 검출.

  • operating system 정보.

java.lang.management API 에 가세해java.util.logging.LoggingMXBean API 에서는, 로깅의 감시 및 관리가 가능합니다.

 

감시 및 관리툴

Java SE 플랫폼에는, JConsole 로 불리는 감시용 그래피컬 툴이 준비되어 있습니다. JConsole 에는 JMX API 가 구현되고 있어 퍼포먼스를 최대한으로 발휘시키기 위한 정보를 제공하는 것으로써, Java VM 와 계측 된 어플리케이션의 퍼포먼스 감시를 가능하게 합니다. J2SE 플랫폼의 버젼 5.0 에 준비되어 있는 JConsole 는, Java SE 플랫폼의 버젼 6 에 대해 공식으로 지원되는 기능이 되었습니다.

이 2 개의 Java SE 플랫폼의 릴리스간에 JConsole 에 추가된 확장 기능의 일부는, 다음과 같습니다.

  • JConsole 플러그 인 지원: 어플리케이션의 MBean 에 액세스 할 때에 필요한 커스텀 탭을 추가하는 등, JConsole 로 실행되는 독자적인 플러그 인 구축이 가능해집니다.

  • 동적 접속 기능: Java SE 플랫폼의 버젼 6 에 추가된 Attach API 를 지원하는 어플리케이션에 JConsole 가 접속 가능해집니다.

  • 강화된 사용자 인터페이스: 데이터 액세스를 한층 더 간단하게 합니다.

  • 새로운 「개요」탭 및 「VM 의 개요」탭: 사용중의 Java VM 에 관한 전체 정보를 보다 알기 쉽게 표시합니다.

  • HotSpot 진단 MBean: 실행시에 heap 덤프를 요구해, 또 일부의 VM 옵션의 설정 변경을 실시하는 API 가 준비되어 있습니다.

  • 강화된 MBean 프레젠테이션: MBean 의 처리나 속성에 대한 액세스를 간단하게 합니다.

JConsole 의 전반에 대해서는,제 3 장 「JConsole 의 사용」 을 참조해 주세요.

다른 커멘드행 툴은, Java SE 플랫폼으로도 사용할 수가 있습니다. 자세한 것은, JDK 개발툴의 문서내에 있는감시 툴의 마디를 참조해 주세요.

 

Java Management Extensions (JMX) 테크놀러지

Java SE 플랫폼의 버젼 6 에서는, JMX 스펙의 버젼이 1.4 가 됩니다. JMX API 에서는, 감시 및 관리를 실시하는 어플리케이션을 계측 할 수가 있습니다. RMI 연결기에서는, JConsole 등에서 이 계측에의 원격 접근이 가능해집니다.

자세한 것은, Java SE 플랫폼의 JMX 테크놀러지 문서 를 참조해 주세요. JMX API 의 주된 컴퍼넌트의 개요에 대해서는, 다음의 마디를 참조해 주세요.

 

MBean 란

JMX 테크놀러지의 MBean 는, 「관리 대상 Bean」, 즉 관리되는 자원을 나타내는 Java 객체입니다. MBean 에는 「관리 인터페이스」가 설치되고 있어 이 인터페이스는 다음의 요소로 구성됩니다.

  • 읽기나 기입해 가능한 이름 첨부 및 형태 부착 속성.

  • 호출해 가능한 이름 첨부 및 형태 부착 조작.

  • MBean 가 송출 가능한 형태 부착 통지.

예를 들어, 어플리케이션의 구성을 나타내는 MBean 에는, 캐쉬 사이즈등이 다양한 구성 파라미터를 나타내는 속성이 준비되어 있습니다. CacheSize 속성을 읽어들이는 것으로, 현재의 캐쉬 사이즈가 돌려주어집니다. CacheSize 에의 기입을 실시하면, 이 캐쉬 사이즈가 갱신되어 어플리케이션의 실행중의 처리를 변경할 수 있을 가능성이 있습니다. save 등의 오퍼레이션에서는, 현재의 설정을 지속적으로 보존할 수가 있습니다. 설정의 변경을 실시하는 경우는, MBean 로 ConfigurationChangedNotification 등의 통지가 보내집니다.

MBean 는, 표준 또는 동적인 것이 됩니다. 표준 MBean 는, JavaBeans 컴퍼넌트 모델에 유래하는, 설계 패턴에 준거한 Java 객체입니다. 동적 MBean 에서는, 실행시에 그 관리 인터페이스를 정의합니다. 최근에는, MXBean 로 불리는 새로운 형식의 MBean 도 Java 플랫폼에 추가되고 있습니다.

  • 표준 MBean 에서는, 그 속성과 조작을 통해서 직접 관리를 실시하는 자원이 공개됩니다. 속성은, 「getter」메소드나 「setter」메소드를 통해서 공개됩니다. 조작은, 클래스의 그 외의 메소드 가운데, 관리측에서 이용 가능한 메소드입니다. 이러한 메소드는 모두 MBean 인터페이스에 정적으로 정의되고 있어 JMX 에이전트에서는, 인트로스페크션을 통해서 이러한 메소드를 확인할 수 있습니다. 이것이 새로운 자원을 관리 가능하게 하는 제일 알기 쉬운 방법입니다.

  • 「동적 MBean」는, 그 관리 인터페이스를 실행시에 정의하는 MBean 입니다. 예를 들어 구성 MBean 는, XML 파일을 해석하는 것으로, 공개하는 속성의 이름과 형태를 결정합니다.

  • 「MXBean」는 새로운 타입의 MBean 입니다. 정의 끝난 형태 세트만을 참조하는 MBean 의 코딩을 간단하게 할 수 있습니다. 이 방법이라면, 원격 클라이언트를 포함한 클라이언트는, MBean 의 형태를 나타내는 모델 고유의 클래스에 액세스 하지 않아도, MBean 를 이용할 수 있습니다. 다음에 설명하는 플랫폼 MBean 는, 모두 MXBean 입니다.

 

MBean 서버

유효하게 하려면 , MBean 를 MBean 서버에 등록할 필요가 있습니다. MBean 서버는, MBean 의 리포지터리(repository)입니다. 각 MBean 는, MBean 서버내의 일의의 이름을 사용해 등록됩니다. MBean 에는, 일반적으로 MBean 서버를 경유해서만 액세스 합니다. 즉, 코드에서는 MBean 에 직접 액세스 하는 것이 아니라, 이름을 사용하는 것으로써, MBean 서버 경유로 MBean 에 액세스 합니다.

Java SE 플랫폼에는, 편입형의 플랫폼 MBean 서버가 포함되어 있습니다. 자세한 것은,제 4 장 「플랫폼 MBean 서버와 플랫폼 MXBean 의 사용」 을 참조해 주세요.

 

MBean 의 작성 및 등록

MBean 의 작성에는 2 통과해 방법이 준비되어 있습니다. 1 번째의 방법은, MBean 인 Java 객체를 작성해,registerMBean 메소드로 그 객체를 MBean 서버에 등록합니다. 이제(벌써) 1 개의 방법에서는,createMBean 메소드의 1 개를 사용해 단일 오퍼레이션으로 MBean 의 작성 및 등록을 실시합니다.

registerMBean 메소드는, 로컬에서의 사용을 목적으로 한 단순한 구조가 되고 있습니다만, 원격로 사용할 수 없습니다. createMBean 메소드는, 원격로 사용할 수가 있습니다만, 경우에 의해 클래스 로딩에 주위를 기울일 필요가 있습니다. MBean 서버로 MBeanRegistration 인터페이스를 도입하고 있는 상태로 MBean 를 그 MBean 서버에 등록 또는 그 서버로부터 등록 해제하는 경우, 그 MBean 로 액션을 실행할 수가 있습니다.

 

어플리케이션의 계측

JMX API 로 관리용 어플리케이션을 계측 하는 일반적인 순서에 대해서는, 다른 메뉴얼을 참조해 주세요. 자세한 것은,Java Management Extensions (JMX) 테크놀러지 를 참조해 주세요..

 

플랫폼 MXBean

플랫폼 MXBean 는, Java Runtime Environment (JRE)의 Java VM 와 그 외의 컴퍼넌트를 감시 및 관리하는 MBean 입니다. 각 MXBean 에서는, 클래스 로딩 시스템, Just In Time (JIT) 컴파일 시스템, 가비지 컬렉터등의 VM 기능의 일부를 캡슐화합니다.

 

겉(표) 1-1 에서는, 모든 플랫폼 MXBean 와 각각의 플랫폼 MXBean 로 관리하는 VM 상태를 일람으로

가리킵니다. 각 플랫폼 MXBean 에는, 플랫폼 MBean 서버의 등록에 필요한 일의의 javax.management.ObjectName 가 있습니다. Java VM 에서는, 각각의 MXBean 의 인스턴스의 수가,

겉(표)에 나타내도록(듯이) MXBean 의 기능에 응해 0, 1, 또는 그 이상이 됩니다.

 

겉(표) 1-1 플랫폼 MXBean

인터페이스

관리하에 있는 VM 의 구분

객체명

VM 마다의 인스턴스수

ClassLoadingMXBean

클래스 로딩 시스템

java.lang:type= ClassLoading

1

CompilationMXBean

컴파일 시스템

java.lang:type= Compilation

0 또는 1

GarbageCollectorMXBean

가비지 컬렉터

java.lang:type= GarbageCollector, name=collectorName

1 개 이상

LoggingMXBean

로깅시스템

java.util.logging:type =Logging

1

MemoryManagerMXBean (GarbageCollectorMXBean 의 서브 인터페이스)

메모리 풀

java.lang:typeMemoryManager, name=managerName

1 개 이상

MemoryPoolMXBean

메모리

java.lang:type= MemoryPool, name=poolName

1 개 이상

MemoryMXBean

메모리 시스템

java.lang:type= Memory

1

OperatingSystemMXBean

기반이 되는 operating system

java.lang:type= OperatingSystem

1

RuntimeMXBean

런타임 시스템

java.lang:type= Runtime

1

ThreadMXBean

thread 시스템

java.lang:type= Threading

1

플랫폼 MXBean (LoggingMXBean 는 제외하다)의 상세한 것에 대하여는,java.lang.management 패키지의 API 레퍼런스에 기재되어 있는 패키지의 해설을 참조해 주세요. LoggingMXBean 의 상세한 것에 대하여는,java.util.logging 의 API 레퍼런스를 참조해 주세요.

 

플랫폼 MBean 서버

「플랫폼 MBean 서버」는, 동일한 Java VM 로 실행하는, 개개에 관리된 컴퍼넌트에 의해 공유할 수가 있습니다. 플랫폼 MBean 서버에는,ManagementFactory.getPlatformMBeanServer() 메소드를 사용해 액세스 할 수가 있습니다. 이 메소드에 대한 1 번째의 호출에 의해, 플랫폼 MBean 서버가 작성되어 다음에 이 서버의 일의의 객체명을 사용해 플랫폼 MXBean 의 등록을 합니다. 그 후, 이 메소드는, 최초로 작성한 플랫폼 MBeanServer 의 인스턴스를 돌려줍니다.

 

동적으로 작성/파기된 MXBean (예를 들어, 메모리 풀이나 매니저)는, 플랫폼 MBean 서버로 자동적으로 등록이나 등록 해제를 합니다. 시스템 프로퍼티 javax.management.builder.initial 의 설정을 하고 있는 경우, 플랫폼 MBean 서버는, 지정의 MBeanServerBuilder 를 사용해 작성됩니다.

 

플랫폼 MBean 서버를 사용해 플랫폼 MXBean 의 옆에 있는 다른 MBean 의 등록을 실시할 수가 있습니다. 이것에 의해, MBean 는 모두 동일한 MBean 서버를 개입시켜 공개되어 네트워크는 보다 간단하게 공개하거나 검출할 수가 있게 됩니다.