java+jmx+cpu监控_通过JMX监控Java进程

本文演示了如何使用Java JMX接口连接到远程服务器,获取并打印GC信息、内存使用情况、操作系统CPU负载及物理内存等关键监控数据,以实现Java进程的性能监控。
摘要由CSDN通过智能技术生成

/**

* 被监控的服务器添加虚拟机参数

* -Dcom.sun.management.jmxremote.port=9001

* -Dcom.sun.management.jmxremote.ssl=false

* -Dcom.sun.management.jmxremote.authenticate=false

*/

public class MbeanManager {

public static void main(String[] args) throws MalformedObjectNameException, IOException, IntrospectionException, InstanceNotFoundException, ReflectionException {

// JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.31.236:9001/jmxrmi");

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9001/jmxrmi");

JMXConnector jmx = JMXConnectorFactory.connect(url,null);

MBeanServerConnection serverConnection = jmx.getMBeanServerConnection();

//获取GC信息

List garbageCollectorMXBeanList = ManagementFactory.getPlatformMXBeans(serverConnection, GarbageCollectorMXBean.class);

garbageCollectorMXBeanList.stream().forEach(garbageCollectorMXBean -> {

System.out.println(garbageCollectorMXBean.getName()); //GC 名称

System.out.println(garbageCollectorMXBean.getCollectionTime()); //GC 总耗时

System.out.println(garbageCollectorMXBean.getCollectionCount()); //GC 次数

Optional.ofNullable(garbageCollectorMXBean.getLastGcInfo()).ifPresent(gcInfo -> {

System.out.println(gcInfo.getMemoryUsageAfterGc());// GC之后的内存使用率

});

});

//获取内存信息

MemoryMXBean memoryMXBean = ManagementFactory.getPlatformMXBean(serverConnection, MemoryMXBean.class);

System.out.println(memoryMXBean.getHeapMemoryUsage());//内存使用率

System.out.println(memoryMXBean.getNonHeapMemoryUsage());//堆外内存使用率

//获取操作系统信息

OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getPlatformMXBean(serverConnection, OperatingSystemMXBean.class);

System.out.println(operatingSystemMXBean.getSystemCpuLoad());//系统负载

System.out.println(operatingSystemMXBean.getProcessCpuLoad());//进程负载

System.out.println(operatingSystemMXBean.getFreePhysicalMemorySize());//空闲物理内存

System.out.println(operatingSystemMXBean.getTotalPhysicalMemorySize());//物理内存

System.out.println(operatingSystemMXBean.getCommittedVirtualMemorySize());//可用于当前虚拟机的虚拟内存

System.out.println(operatingSystemMXBean.getFreeSwapSpaceSize());// 空闲的交换区

System.out.println(operatingSystemMXBean.getVersion());//操作系统版本

System.out.println(operatingSystemMXBean.getProcessCpuTime());//进程获取的CPU时间

//获取线程信息

ThreadMXBean threadMXBean = ManagementFactory.getPlatformMXBean(serverConnection, ThreadMXBean.class);

System.out.println(threadMXBean.getPeakThreadCount());//峰值线程数

System.out.println(threadMXBean.getThreadCount());//当前线程数

System.out.println(threadMXBean.getDaemonThreadCount());//启动的守护线程总数

System.out.println(threadMXBean.getTotalStartedThreadCount());//启动的线程总数

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值