JVM Manangent API

JVM本身提供了一组管理的API,通过API,我们可以获得到JVM内部主要运行信息等等。各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于此API开发的。


1. HotSpotDiagnostic

非标准的监控JMS,这块是Sun JVM自带的,主要提供了两个功能

  • 修改JVM的启动参数。
  • Dump堆信息到文件。
2.ClassLoading
加载的类的总体信息,我们可以通过此MBean获取到JVM加载的类定义的总体信息。


3.Compliation
提供JVM的JIT(Just In Time)编译器(将bytecode编译成native code)的信息。

4.GarbageCollector
垃圾回收器信息。

5.内存相关
(1)Memory/MemoryManager
内存块相关信息。
(2)MemoryPool

6.系统运行信息
(1)OperatingSystem
操作系统上的一些信息。
(2)Runtime
获取JVM一些相关信息。

7.Threading
可以通过此MBean获取线程信息,包括线程状态、执行栈等。

编程获取到JVM Manage信息
有3种方式
(1)监控应用与被监控应用位于同一JVM
MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
RuntimeMXBean rmxb = ManagementFactory.newPlatformMXBeanProxy(server,  
                "java.lang:type=Runtime", RuntimeMXBean.class);

(2)监控应用与被监控应用位于不同JVM
  • 首先在被监控的JVM的启动参数中加入如下启动参数以启JVM代理
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=127.0.0.1:8000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

  • 连接上代理
JMXServiceURL url = new JMXServiceURL(  
        "service:jmx:rmi:///jndi/rmi://127.0.0.1:8000/jmxrmi");  
JMXConnector connector = JMXConnectorFactory.connect(url);  
RuntimeMXBean rmxb = ManagementFactory.newPlatformMXBeanProxy(connector  
            .getMBeanServerConnection(),"java.lang:type=Runtime",  
                RuntimeMXBean.class);  
(3)监控应用与被监控应用不位于同一JVM但在同一物理主机上
通过Attach到被监控的JVM进程,并在被监控的JVM中启动一个JMX代理,然后使用代理通过2的方式连接到被监控的JVM的JMS上。

/Attach 到5656的JVM进程上,后续Attach API再讲解  
VirtualMachine virtualmachine = VirtualMachine.attach("5656");  
  
//让JVM加载jmx Agent,后续讲到Java Instrutment再讲解  
String javaHome = virtualmachine.getSystemProperties().getProperty("java.home");  
String jmxAgent = javaHome + File.separator + "lib" + File.separator + "management-agent.jar";  
virtualmachine.loadAgent(jmxAgent, "com.sun.management.jmxremote");  
  
//获得连接地址  
Properties properties = virtualmachine.getAgentProperties();  
String address = (String)properties.get("com.sun.management.jmxremote.localConnectorAddress");  
         
//Detach  
virtualmachine.detach();  
         
JMXServiceURL url = new JMXServiceURL(address);  
JMXConnector connector = JMXConnectorFactory.connect(url);  
RuntimeMXBean rmxb = ManagementFactory.newPlatformMXBeanProxy(connector  
                .getMBeanServerConnection(), "java.lang:type=Runtime",RuntimeMXBean.class);  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值