management包中提供了比较全面的监控和管理工具,包括JVM的监管API、监管API日志等等。
管理接口
PlatformManagementObject接口:所有的管理接口都要继承该接口,这个接口是从1.7才出现的,从其文档的注释中可以看到其存在的价值是为以后平台的扩展而设计的,而不是为了应用程序。
BufferPoolMXBean接口:缓冲池管理接口包括direct和mapped类型的缓冲池。
ClassLoadingMXBean接口:类加载管理接口,可以监控管理虚拟机类加载系统。
CompilationMXBean接口:虚拟机的编译系统的管理与监控。
GarbageCollectorMXBean接口:虚拟机垃圾收集的管理接口,通过该接口可以查看垃圾收集的时间和次数。
MemoryManagerMXBean接口:该接口用于内存管理,其中,垃圾收集器属于该类型的内存管理器。
MemoryMXBean接口:用于虚拟机的内存管理,执行GC、获取堆内存和非堆内存相关数据。
MemoryPoolMXBean接口:用于内存池的管理,所谓的内存池表示的是虚拟机使用和内存管理者管理的内存资源。
OperatingSystemMXBean接口:操作系统管理接口,可以查看系统的平均负载、系统参数、可用的进程数、系统版本和名称等等。
PlatformLoggingMXBean接口:日志管理接口,可以设置日志级别、获取日志名称等等。
RuntimeMXBean接口:虚拟机运行时管理接口,获取虚拟机的名称、虚拟机版本、获取java的classpath、获取系统参数等。
ThreadMXBean接口:虚拟机线程管理。可以获取线程数、获取线程Id、线程信息、当前线程CPU时间、当前线程用户时间、查看死锁线程等等。
信息类实体
LockInfo:任何的java锁(简单的java锁和Concurrent包中所使用的锁,AbstractOwnableSynchronizer和Condition的实现类/子类)。
MemoryUsage:内存使用快照,用于获取每个虚拟机或者堆或者虚拟机非堆内存池作为整体的使用信息。
private final long init;
private final long used;
private final long committed;
private final long max;
MemoryNotificationInfo:内存通知的信息。
MonitorInfo:继承自LockInfo,同步代码块或者是同步方法上的锁。
ThreadInfo:线程信息,包括线程名称,线程id,阻塞时间,阻塞次数,等待时间,等待次数,锁信息,锁名称,锁拥有者id等。
private String threadName;
private long threadId;
private long blockedTime;
private long blockedCount;
private long waitedTime;
private long waitedCount;
private LockInfo lock;
private String lockName;
private long lockOwnerId;
private String lockOwnerName;
private boolean inNative;
private boolean suspended;
private Thread.State threadState;
private StackTraceElement[] stackTrace;
private MonitorInfo[] lockedMonitors;
private LockInfo[] lockedSynchronizers;
ManagementPermission:权限管理类。
工厂类
ManagementFactory:MXBean通过该工厂类进行获取,使用了工厂模式管理,经过该类获取到相应的MXBean类之后再调用其中的方法得到需要管理和监控的信息。
示例
获取堆内存的使用情况。
MemoryMXBean memMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage memUsage = memMXBean.getHeapMemoryUsage();
memUsage.getInit();
memUsage.getMax();
memUsage.getUsed();