Java Language
JMX
수색…
소개
JMX 기술은 장치, 응용 프로그램 및 서비스 중심 네트워크를 관리하고 모니터링하기위한 분산 형 웹 기반 모듈 식 동적 솔루션을 구축하기위한 도구를 제공합니다. 설계 상으로,이 표준은 레거시 시스템을 적용하고, 새로운 관리 및 모니터링 솔루션을 구현하고, 미래의 시스템에 연결하는 데 적합합니다.
플랫폼 MBean 서버의 간단한 예
새로운 사용자를 등록하고 메시지를 써주는 서버가 있다고 가정 해 봅시다. 우리는이 서버를 모니터링하고 매개 변수 중 일부를 변경하려고합니다.
첫째, 우리는 우리의 감시 및 통제 방법들과의 인터페이스가 필요하다.
public interface UserCounterMBean {
long getSleepTime();
void setSleepTime(long sleepTime);
int getUserCount();
void setUserCount(int userCount);
String getGreetingString();
void setGreetingString(String greetingString);
void stop();
}
그리고 그것이 작동하는 방법과 우리가 그것에 영향을 미치는 방법을 볼 수있는 간단한 구현
public class UserCounter implements UserCounterMBean, Runnable {
private AtomicLong sleepTime = new AtomicLong(10000);
private AtomicInteger userCount = new AtomicInteger(0);
private AtomicReference<String> greetingString = new AtomicReference<>("welcome");
private AtomicBoolean interrupted = new AtomicBoolean(false);
@Override
public long getSleepTime() {
return sleepTime.get();
}
@Override
public void setSleepTime(long sleepTime) {
this.sleepTime.set(sleepTime);
}
@Override
public int getUserCount() {
return userCount.get();
}
@Override
public void setUserCount(int userCount) {
this.userCount.set(userCount);
}
@Override
public String getGreetingString() {
return greetingString.get();
}
@Override
public void setGreetingString(String greetingString) {
this.greetingString.set(greetingString);
}
@Override
public void stop() {
this.interrupted.set(true);
}
@Override
public void run() {
while (!interrupted.get()) {
try {
System.out.printf("User %d, %s%n", userCount.incrementAndGet(), greetingString.get());
Thread.sleep(sleepTime.get());
} catch (InterruptedException ignored) {
}
}
}
}
로컬 또는 원격 관리를 사용하는 간단한 예제의 경우 MBean을 등록해야합니다.
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
public class Main {
public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
final UserCounter userCounter = new UserCounter();
final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
final ObjectName objectName = new ObjectName("ServerManager:type=UserCounter");
mBeanServer.registerMBean(userCounter, objectName);
final Thread thread = new Thread(userCounter);
thread.start();
thread.join();
}
}
그 다음에는 $JAVA_HOME/bin
디렉토리에있는 jConsole을 통해 응용 프로그램을 실행하고이 응용 프로그램에 연결할 수 있습니다. 첫째, 우리는 우리의 애플리케이션으로 우리 지역의 자바 프로세스를 찾아야한다.
그런 다음 MBean 탭으로 전환하여 Main 클래스에서 사용한 MBean을 ObjectName
으로 찾으십시오 (위의 예에서는 ServerManager
). Attributes
섹션에서 우리는 속성을 볼 수 있습니다. get 메소드 만 지정한 경우, 속성은 읽을 수는 있지만 쓰기 가능하지는 않습니다. get 및 set 메소드를 모두 지정하면 속성을 읽고 쓸 수 있습니다.
지정된 메소드는 Operations
섹션에서 호출 할 수 있습니다.
원격 관리를 사용하려면 다음과 같은 추가 JVM 매개 변수가 필요합니다.
-Dcom.sun.management.jmxremote=true //true by default
-Dcom.sun.management.jmxremote.port=36006
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
이러한 매개 변수는 JMX 가이드의 2 장 에서 찾을 수 있습니다. 그런 다음 jConsole jconsole host:port
를 사용하여 원격으로 jConsole을 통해 응용 프로그램에 연결하거나 jConsole GUI에서 host:port
또는 service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi
를 지정하여 응용 프로그램에 연결할 수 있습니다.
유용한 링크: