JVM监控
来源:互联网 发布:机房机柜网络整改 编辑:程序博客网 时间:2024/05/19 22:52
JVM监控项
JVM监控原理
JDK的java.lang.management包提供了管理接口,用于监控管理JVM及操作系统。如上图所示,JVM有众多监控项,根据JMX规范,每个监控项用MXBean表示,应用程序通过访问MXBean接口获取监控数据。访问方式分为两种:
1. 直接访问
通过静态工厂方法直接获取对应的MXBean,然后获取监控数据;
2. 间接访问
通过MBeanServer间接访问MXBean:其它应用程序需要(本地或远程)通过特定的MBeanServerConnection连接到MBeanServer;
代码示例
通过直接访问的方式获取监控的代码示例如下所示:
JVM概述
/** * 类描述:JVM信息工具类 * * @author ruipeng.lrp * @since 2017/10/23 **/public class JVMInfoUtils { static private RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); static private ClassLoadingMXBean classLoad = ManagementFactory.getClassLoadingMXBean(); static private CompilationMXBean compilation = ManagementFactory.getCompilationMXBean(); static private Properties properties = System.getProperties(); // JVM规范名称 static public String getJVMSpecName() { return runtime.getSpecName(); } // JVM规范运营商 static public String getJVMSpecVendor() { return runtime.getSpecVendor(); } // JVM规范版本 static public String getJVMSpecVersion() { return runtime.getSpecVersion(); } // JVM名称 static public String getJVMName() { return runtime.getVmName(); } // JVM运营商 static public String getJVMVendor() { return runtime.getVmVendor(); } // JVM实现版本 static public String getJVMVersion() { return runtime.getVmVersion(); } // JVM启动时间 static public long getJVMStartTimeMs() { return runtime.getStartTime(); } // JVM运行时间 static public long getJVMUpTimeMs() { return runtime.getUptime(); } // JVM当前加载类总量 static public long getJVMLoadedClassCount() { return classLoad.getLoadedClassCount(); } // JVM已卸载类总量 static public long getJVMUnLoadedClassCount() { return classLoad.getUnloadedClassCount(); } // JVM从启动到现在加载类总量 static public long getJVMTotalLoadedClassCount() { return classLoad.getTotalLoadedClassCount(); } // JIT编译器名称 static public String getJITName() { return compilation.getName(); } // JIT总编译时间 static public long getJITTimeMs() { if (compilation.isCompilationTimeMonitoringSupported()) { return compilation.getTotalCompilationTime(); } return -1; } // 获取指定key的属性值 static public String getSystemProperty(String key) { return properties.getProperty(key); } static public Properties getSystemProperty() { return properties; }}
JVM内存
import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean;import java.lang.management.MemoryPoolMXBean;import java.util.List;/** * 类描述:JVM内存信息工具类 * * @author ruipeng.lrp * @since 2017/10/23 **/public class JVMMemoryUtils { static private MemoryMXBean memoryMXBean; static private MemoryPoolMXBean permGenMxBean; static private MemoryPoolMXBean oldGenMxBean; static private MemoryPoolMXBean edenSpaceMxBean; static private MemoryPoolMXBean pSSurvivorSpaceMxBean; static { memoryMXBean = ManagementFactory.getMemoryMXBean(); List<MemoryPoolMXBean> list = ManagementFactory.getMemoryPoolMXBeans(); for (MemoryPoolMXBean item : list) { if ("CMS Perm Gen".equals(item.getName()) // || "Perm Gen".equals(item.getName()) // || "PS Perm Gen".equals(item.getName()) // || "G1 Perm Gen".equals(item.getName()) // ) { permGenMxBean = item; } else if ("CMS Old Gen".equals(item.getName()) // || "Tenured Gen".equals(item.getName()) // || "PS Old Gen".equals(item.getName()) // || "G1 Old Gen".equals(item.getName()) // ) { oldGenMxBean = item; } else if ("Par Eden Space".equals(item.getName()) // || "Eden Space".equals(item.getName()) // || "PS Eden Space".equals(item.getName()) // || "G1 Eden".equals(item.getName()) // ) { edenSpaceMxBean = item; } else if ("Par Survivor Space".equals(item.getName()) // || "Survivor Space".equals(item.getName()) // || "PS Survivor Space".equals(item.getName()) // || "G1 Survivor".equals(item.getName()) // ) { pSSurvivorSpaceMxBean = item; } } }// static // 堆内存-已使用 static public long getHeapMemoryUsed() { return memoryMXBean.getHeapMemoryUsage().getUsed(); } // 堆内存-最大值 static public long getHeapMemoryMax() { return memoryMXBean.getHeapMemoryUsage().getMax(); } // 堆外内存-已使用 static public long getNonHeapMemoryUsed() { return memoryMXBean.getNonHeapMemoryUsage().getUsed(); } // 堆外内存-最大值 static public long getNonHeapMemoryMax() { return memoryMXBean.getNonHeapMemoryUsage().getMax(); } // 持久代-已使用 static public long getPermGenUsed() { return null == permGenMxBean ? 0 : permGenMxBean.getUsage().getUsed(); } // 持久代-最大值 static public long getPermGenMax() { return null == permGenMxBean ? 0 : permGenMxBean.getUsage().getMax(); } // 老年代-已使用 static public long getOldGenUsed() { return null == oldGenMxBean ? 0 : oldGenMxBean.getUsage().getUsed(); } // 老年代-最大值 static public long getOldGenMax() { return null == oldGenMxBean ? 0 : oldGenMxBean.getUsage().getMax(); } // Eden-已使用 static public long getEdenGenUsed() { return null == edenSpaceMxBean ? 0 : edenSpaceMxBean.getUsage().getUsed(); } // Eden-最大值 static public long getEdenGenMax() { return null == edenSpaceMxBean ? 0 : edenSpaceMxBean.getUsage().getMax(); } // Survivor-已使用 static public long getSurvivorUsed() { return null == pSSurvivorSpaceMxBean ? 0 : pSSurvivorSpaceMxBean.getUsage().getUsed(); } // Survivor-最大值 static public long getSurvivorMax() { return null == pSSurvivorSpaceMxBean ? 0 : pSSurvivorSpaceMxBean.getUsage().getMax(); } public static void main(String[] args) { System.out.println(JVMMemoryUtils.getHeapMemoryMax()); System.out.println(JVMMemoryUtils.getHeapMemoryUsed()); System.out.println(JVMMemoryUtils.getNonHeapMemoryMax()); System.out.println(JVMMemoryUtils.getNonHeapMemoryUsed()); System.out.println(JVMMemoryUtils.getOldGenMax()); System.out.println(JVMMemoryUtils.getOldGenUsed()); System.out.println(JVMMemoryUtils.getPermGenMax()); System.out.println(JVMMemoryUtils.getPermGenUsed()); System.out.println(JVMMemoryUtils.getEdenGenMax()); System.out.println(JVMMemoryUtils.getEdenGenUsed()); System.out.println(JVMMemoryUtils.getSurvivorMax()); System.out.println(JVMMemoryUtils.getSurvivorUsed()); }}
JVM GC
import java.lang.management.GarbageCollectorMXBean;import java.lang.management.ManagementFactory;import java.util.ListIterator;/** * 类描述:JVM GC信息工具类 * * @author ruipeng.lrp * @since 2017/10/23 **/public class JVMGCUtils { static private GarbageCollectorMXBean fullGC; static private GarbageCollectorMXBean youngGC; static{ for (ListIterator<GarbageCollectorMXBean> iter = ManagementFactory.getGarbageCollectorMXBeans().listIterator(); iter.hasNext();) { GarbageCollectorMXBean item = iter.next(); if ("ConcurrentMarkSweep".equals(item.getName()) // || "MarkSweepCompact".equals(item.getName()) // || "PS MarkSweep".equals(item.getName()) // || "G1 Old Generation".equals(item.getName()) // || "Garbage collection optimized for short pausetimes Old Collector".equals(item.getName()) // || "Garbage collection optimized for throughput Old Collector".equals(item.getName()) // || "Garbage collection optimized for deterministic pausetimes Old Collector".equals(item.getName()) // ) { fullGC = item; } else if ("ParNew".equals(item.getName()) // || "Copy".equals(item.getName()) // || "PS Scavenge".equals(item.getName()) // || "G1 Young Generation".equals(item.getName()) // || "Garbage collection optimized for short pausetimes Young Collector".equals(item.getName()) // || "Garbage collection optimized for throughput Young Collector".equals(item.getName()) // || "Garbage collection optimized for deterministic pausetimes Young Collector".equals(item.getName()) // ) { youngGC = item; } } }//static //YGC总次数 static public long getYoungGCCollectionCount() { return youngGC == null ? 0 : youngGC.getCollectionCount(); } //YGC总时间 static public long getYoungGCCollectionTime() { return youngGC == null ? 0 : youngGC.getCollectionTime(); } //FGC总次数 public long getFullGCCollectionCount() { return fullGC == null ? 0 : fullGC.getCollectionCount(); } //FGC总次数 public long getFullGCCollectionTime() { return fullGC == null ? 0 : fullGC.getCollectionTime(); }}
JVM 线程
import java.lang.management.ManagementFactory;import java.lang.management.ThreadMXBean;/** * 类描述:JVM 线程信息工具类 * * @author ruipeng.lrp * @since 2017/10/23 **/public class JVMThreadUtils { static private ThreadMXBean threadMXBean; static { threadMXBean = ManagementFactory.getThreadMXBean(); } //Daemon线程总量 static public int getDaemonThreadCount() { return threadMXBean.getDaemonThreadCount(); } //当前线程总量 static public int getThreadCount() { return threadMXBean.getThreadCount(); } //死锁线程总量 static public int getDeadLockedThreadCount() { try { long[] deadLockedThreadIds = threadMXBean.findDeadlockedThreads(); if (deadLockedThreadIds == null) { return 0; } return deadLockedThreadIds.length; } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); } }}
阅读全文
0 0
- jvm监控
- JVM 监控
- JVM 监控
- JVM监控
- JVM监控
- JVM监控
- JVM监控
- jvm监控
- JVM内存监控:VisualVM远程监控JVM
- JVM内存监控:VisualVM远程监控JVM
- jvm相关监控工具
- JVM内存监控、分析
- JVM监控----积累中
- 【转】远程监控JVM
- JVM 性能监控
- 运用Jconsole监控JVM
- 远程监控JVM--VisualVM
- JVM监控工具介绍
- 导出excel
- 操作系统、驱动和硬件的关系的思考
- 10分钟带你看懂冒泡排序Yu选择排序
- Python3爬取某教育平台题库保存为Word文档
- U盘安装CentOS7 的注意要点
- JVM监控
- 一点点前端代码,使用ECharts插入柱状图
- 自动查找进程PID 并关闭
- elasticsearch排序
- Canvas的drawBitmap以及Paint的PorterDuffXfermode使用心得
- Tensorflow的常用函数与基本概念
- visual studio 生成的程序在其他机器上运行
- 折叠方阵的变式:蛇形折叠/回转折叠(两种方法)及说明
- spring静态资源处理