Java之API监控系统关键指标简介说明
下文笔者讲述java程序中常用的监控指标简介说明,如下所示
例:
并查询它们以获得关于当前JVM上运行的线程的有用信息
java程序监控常涉及的指标有: 磁盘空间、内存使用率以及线程信息 实现思路: 1.File类检测磁盘占用情况 2.ManagementFactory类用于分析内存使用情况及处理器信息 该工厂类可获取管理bean(MXBeans)关于JVM的相关信息,我们主要用到MemoryMXBean和ThreadMXBean类 2.1:MemoryMXBean MemoryMXBean表示JVM的内存系统上管理接口 JVM创建了该接口的单实例 可调用getMemoryMXBean()方法获取信息 2.2:ThreadMXBean 与MemoryMXBean类类似 ThreadMXBean类是JVM线程系统管理接口 可调用getThreadMXBean()方法获取相关线程的关键信息例:
API实现监控
磁盘使用率使用File类获取分区的关键信息 如:总磁盘空间、未分配的磁盘空间以及可用的磁盘空间 可用磁盘空间应该大于或等于未分配的磁盘空间。 读取windows上的C盘: File cDrive = new File("C:"); System.out.println(String.format("Total space: %.2f GB", (double)cDrive.getTotalSpace() /1073741824)); System.out.println(String.format("Free space: %.2f GB", (double)cDrive.getFreeSpace() /1073741824)); System.out.println(String.format("Usable space: %.2f GB", (double)cDrive.getUsableSpace() /1073741824)); linux上根目录信息: File root = new File("/"); System.out.println(String.format("Total space: %.2f GB", (double)root.getTotalSpace() /1073741824)); System.out.println(String.format("Free space: %.2f GB", (double)root.getFreeSpace() /1073741824)); System.out.println(String.format("Usable space: %.2f GB", (double)root.getUsableSpace() /1073741824));
内存使用率
可以使用ManagementFactory工厂类的MemoryMXBean方法获取JVM内存情况例:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); System.out.println(String.format("Initial memory: %.2f GB", (double)memoryMXBean.getHeapMemoryUsage().getInit() /1073741824)); System.out.println(String.format("Used heap memory: %.2f GB", (double)memoryMXBean.getHeapMemoryUsage().getUsed() /1073741824)); System.out.println(String.format("Max heap memory: %.2f GB", (double)memoryMXBean.getHeapMemoryUsage().getMax() /1073741824)); System.out.println(String.format("Committed memory: %.2f GB", (double)memoryMXBean.getHeapMemoryUsage().getCommitted() /1073741824)); Initial: OS启动时JVM请求初始化的内存大小 Used: 当前JVM使用的内存大小 Max: JVM最大有效内存. 如果达到该限制值会抛 OutOfMemoryException 异常 Committed: 保证JVM可用内存大小
CPU使用情况
ThreadMXBean获得ThreadInfo对象的完整列表并查询它们以获得关于当前JVM上运行的线程的有用信息
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); for(Long threadID : threadMXBean.getAllThreadIds()) { ThreadInfo info = threadMXBean.getThreadInfo(threadID); System.out.println("Thread name: " + info.getThreadName()); System.out.println("Thread State: " + info.getThreadState()); System.out.println(String.format("CPU time: %s ns", threadMXBean.getThreadCpuTime(threadID))); } 调用getAllThreadIds方法获取当前线程列表 然后对每个线程输出其线程名称和状态 最后输出线程占用CPU时间(以纳秒为单位)
使用Profiler监控系统
Java Profilers密切监控jvm的关键指标并进行实时分析 从Java6开始自带的VisualVM工具功能很强大 其他一些IDE也包括相应插件实现相同功能
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。