Java之API监控系统关键指标简介说明

书欣 Java经验 发布时间:2022-08-12 16:59:45 阅读数:10383 1
下文笔者讲述java程序中常用的监控指标简介说明,如下所示
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也包括相应插件实现相同功能
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202208/16602948364220.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者