摘要
为了保障业务系统的连续性,需要监控服务器JVM内存使用情况,防止因系统异常出现宕机。JDK自带的Java VirsualVM是个很好的监控及分析JVM状况的工具,但生产环境并不适用。生产环境数据监控我司使用的是Grafana平台,通过清洗来自日志文件的指标数据,生成实时图像。这就需要通过编码的方式获取JVM的信息,然后打印到日志里。java.lang.management
包提供类方法恰好可以满足我的需求。
java.lang.management包相关用法简介
1, ManageFactory
类的静态方法getMemoryMXBean()
返回包含JVM内存信息的对象MemoryMXBean
2, MemoryMXBean
对象包含的内存信息分为堆内存信息(Heap)和非堆内存信息(Non-heap Memory),分别通过getHeapMemoryUsage()
和getNonHeapMemoryUsage()
方法获取,返回对象类型都是MemoryUsage
3, MemoryUsage
类中包含四个不同的变量
init
启动时JVM向操作系统请求的内存容量,单位bytemax
JVM能够管理的最大内存容量,单位byte,如果定义了运行时也可能随时间变化committed
JVM保证可以使用的内存容量,单位byte,运行时会随时间