本文轉自:http://wangxuliangboy.iteye.com/blog/347189java
JAVA 平臺MXBean 是一種託管 Bean,它符合 JMX Instrumentation Specification,提供管理接口,用於監視和管理 Java 虛擬機以及 Java 虛擬機在其上運行的操做系統。
JAVA 平臺MXBean:
ClassLoadingMXBean 用於 Java 虛擬機的類加載系統的管理接口。
CompilationMXBean 用於 Java 虛擬機的編譯系統的管理接口。
GarbageCollectorMXBean 用於 Java 虛擬機的垃圾回收的管理接口。
MemoryManagerMXBean 內存管理器的管理接口。
MemoryMXBean Java 虛擬機的內存系統的管理接口。
MemoryPoolMXBean 內存池的管理接口。
OperatingSystemMXBean 用於操做系統的管理接口,Java 虛擬機在此操做系統上運行。
RuntimeMXBean Java 虛擬機的運行時系統的管理接口。
ThreadMXBean Java 虛擬機線程系統的管理接口。服務器
Java 虛擬機的每一個平臺 MXBean 都具備唯一的 ObjectName,以在平臺 MBeanServer 中註冊。Java 虛擬機具備如下管理接口的單一實例:
管理接口 對象名稱
ClassLoadingMXBean java.lang:type=ClassLoading
MemoryMXBean java.lang:type=Memory
ThreadMXBean java.lang:type=Threading
RuntimeMXBean java.lang:type=Runtime
OperatingSystemMXBean java.lang:type=OperatingSystem
MemoryManagerMXBean java.lang:type=MemoryManager架構
得到平臺MXBean的方法:
1. 經過調用 ManagementFactory.getClassLoadingMXBean() 方法
2. 平臺 MBeanServer 方法得到.
MBeanServer server = ManagementFactory.createPlatformMBeanServer();
MBeanInfo info = server.getMBeanInfo(new ObjectName("java.lang:type=ClassLoading")); // 經過ClassLoading的ObjectName,查找MBean爲管理而公開的屬性和操做。
server.getAttribute(new ObjectName("java.lang:type=ClassLoading"), "TotalLoadedClassCount") //返回自 Java 虛擬機開始執行到目前已經加載的類的總數。url
ClassLoadingMXBean能獲取的數據:
getLoadedClassCount()
返回當前加載到 Java 虛擬機中的類的數量。
getTotalLoadedClassCount()
返回自 Java 虛擬機開始執行到目前已經加載的類的總數。
getUnloadedClassCount()
返回自 Java 虛擬機開始執行到目前已經卸載的類的總數。操作系統
MemoryMXBean能獲取的數據:
gc()
運行垃圾回收器。
MemoryUsage getHeapMemoryUsage()
返回用於對象分配的堆的當前內存使用量。
MemoryUsage getNonHeapMemoryUsage()
返回 Java 虛擬機使用的非堆內存的當前使用量。線程
ThreadMXBean能獲取的數據:
getAllThreadIds()
返回活動線程 ID。
getCurrentThreadCpuTime()
返回當前線程的總 CPU 時間(以毫微秒爲單位)。
getCurrentThreadUserTime()
返回當前線程在用戶模式中執行的 CPU 時間(以毫微秒爲單位)。
getDaemonThreadCount()
返回活動守護線程的當前數目。
getPeakThreadCount()
返回自從 Java 虛擬機啓動或峯值重置以來峯值活動線程計數。
getThreadCount()
返回活動線程的當前數目,包括守護線程和非守護線程。
getThreadCpuTime(long id)
返回指定 ID 的線程的總 CPU 時間(以毫微秒爲單位)。
ThreadInfo getThreadInfo(long id)
返回指定 id 的不具備堆棧跟蹤的線程的線程信息。
RuntimeMXBean能獲取的數據:
getBootClassPath()
返回由引導類加載器用於搜索類文件的引導類路徑。
String getClassPath()
返回系統類加載器用於搜索類文件的 Java 類路徑。
List<String> getInputArguments()
返回傳遞給 Java 虛擬機的輸入變量,其中不包括傳遞給 main 方法的變量。
String getLibraryPath()
返回 Java 庫路徑。
String getManagementSpecVersion()
返回正在運行的 Java 虛擬機實現的管理接口的規範版本。
OperatingSystemMXBean 能獲取的數據:
getArch()
返回操做系統的架構。
int getAvailableProcessors()
返回 Java 虛擬機能夠使用的處理器數目。
String getName()
返回操做系統名稱。
String getVersion()
返回操做系統的版本
MemoryManagerMXBean能獲取的數據:
getMemoryPoolNames()
返回此內存管理器管理的內存池名稱。
String getName()
返回表示此內存管理器的名稱。
還有一些MXBean就不所有列出來啦..代理
咱們也能夠經過特定的 MBeanServerConnection 遠程訪問 MXBean:
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, /jndi/rmi://" + host + ":" + port + "/jmxrmi);
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection server = jmxc.getMBeanServerConnection();orm
public static <T> T newPlatformMXBeanProxy(MBeanServerConnection connection,
String mxbeanName,
Class<T> mxbeanInterface)
返回用於給定 MXBean 名稱的平臺 MXBean 接口的代理,以便經過給定 MBeanServerConnection 轉發其方法調用。server
ClassLoadingMXBean mxClassLoadingMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.CLASS_LOADING_MXBEAN_NAME, ClassLoadingMXBean.class);
CompilationMXBean mxCompilationMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.COMPILATION_MXBEAN_NAME, CompilationMXBean.class);
OperatingSystemMXBean mxOperatingSystemMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME, OperatingSystemMXBean.class);
RuntimeMXBean mxRuntimeMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.RUNTIME_MXBEAN_NAME, RuntimeMXBean.class);
GarbageCollectorMXBean mxGarbageCollectorMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, GarbageCollectorMXBean.class);
MemoryManagerMXBean mxMemoryManagerMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE, MemoryManagerMXBean.class);
MemoryPoolMXBean mxMemoryPoolMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection, ManagementFactory.MEMORY_POOL_MXBEAN_DOMAIN_TYPE, MemoryPoolMXBean.class);對象
使用 MXBean 代理能夠方便地遠程訪問正在運行的虛擬機的平臺 MXBean。 全部對 MXBean 代理的方法調用都被轉發到 MBeanServerConnection,當鏈接器服務器出現通訊問題時,可能在其中拋出 IOException。 若是使用代理遠程訪問平臺 MXBean 的應用程序要訪問 MBeanServerConnector 接口,則應該準備捕獲 IOException。