JMX 已定义 [已关闭]
我正在寻找:
- JMX是什么。
- 在哪里可以找到一些好的JMX教程。
- JMX作为Java EE程序员可以为我提供什么。
- 其他任何事情我都应该注意。
我正在寻找:
JMX 是一种查看和操作应用程序的运行时状态的方法。如果有帮助的话,它在概念上与SNMP有些相似。IMO,它对于监视和理解服务器类型的应用程序是必不可少的,这些应用程序除了写入日志文件之外可能没有其他用户界面。
基本方法是为要监视的内容创建一个接口,然后让一个类实现该接口,然后向“MBeanServer”注册该类的实例(这实际上使接口中定义的内容可用于JMX监视应用程序,如jconsole)。
这是一个微不足道但有效的示例:
(我假设Java 5或更高版本)
public interface TestServerMBean
{
public long getUptimeMillis();
public long getFooCount();
public void setFooCount(long val);
public void printStuff(String stuff);
}
import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;
import javax.management.ObjectName;
// If jconsole doesn't see this app automatically, invoke the application with the following java flags, and connect
// 'remotely' via jconsole.
//
// -Dcom.sun.management.jmxremote
// -Dcom.sun.management.jmxremote.port=2222 (or whatever)
// -Dcom.sun.management.jmxremote.authenticate=false
// -Dcom.sun.management.jmxremote.ssl=false
public class TestServer implements TestServerMBean
{
private final AtomicLong m_counter = new AtomicLong(0L);
private final long m_startTimeMillis = System.currentTimeMillis();
public void run() throws InterruptedException {
while (true) {
m_counter.incrementAndGet();
Thread.sleep(5000);
}
}
public long getFooCount() {
return m_counter.get();
}
public void setFooCount(long val) {
m_counter.set(val);
}
public long getUptimeMillis() {
return System.currentTimeMillis() - m_startTimeMillis;
}
public void printStuff(String stuff) {
System.out.println(stuff);
}
public static void main(String[] args) throws Exception {
TestServer ts = new TestServer();
ManagementFactory.getPlatformMBeanServer().registerMBean(ts, new ObjectName("myapp:service=MyServer"));
ts.run();
}
}
编译并运行 TestServer.class像往常一样,启动,连接到 TestServer(它将自动显示,否则请参阅上面代码中的注释),然后查看“MBeans”选项卡,您将看到我们的实例名为 。您可以查看当前的“正常运行时间”,并观看每5秒递增一次。您还可以将 FooCounter 设置为所需的任何(长)值,并使用任何 String 参数调用该方法。jconsole
myapp:service=MyServer
FooCounter
printStuff
显然,这是一个荒谬的“服务器”,但希望有一个简单的工作示例将有助于说明整体概念:能够窥视和操作正在运行的应用程序。
有很多附加功能和不同类型的MBA,但仅上面显示的香草JMX就可以走很长的路,IMO。
简而言之,JMX允许您远程调用方法或从正在运行的JVM内部查看公开的数据。许多应用程序使用 JMX 将远程仪表板附加到其正在运行的 JVM,以便提供远程管理。
例如,如果您在计算机上运行一个应用程序服务器,则使用JMX可以远程查看有关该服务器的公开信息。还可以编写自己的 JMX MBean 代码,它可以公开应用程序内的任何变量或方法。然后,可以远程“轮询”公开的变量,以测试您想知道的某些条件。
关于JMX的另一个有用之处在于,您可以动态地远程更改变量。例如,如果您设置了某种具有最大总量的池,则可以远程更改此最大数量,而无需重新启动或更改应用程序服务器上的任何配置文件。
jconsole
由 Sun 与 Java 一起提供,以便能够轻松地远程查看 MBean,而无需编写自己的客户端解决方案。您还可以使用自定义解决方案来使用 MBean,这可以为您提供出色的灵活性。
此外,已经有一些内置JMX MBean监控的监控软件。Zenoss和Appplications Manager 8就是这样做的,举几个例子。
加法:
已经有很多软件利用了JMX。Tomcat公开了可以通过jconsole访问的信息,JBoss Application Server也是如此。