JMX即Java Managemen Extensions,是一個爲應用程序植入管理功能的框架。一套標準的代理和服務,實際上,用戶能夠在任何Java應用程序中使用這些代理和服務實現管理。java
經常在編程的過程當中有一些配置信息須要動態的進行改變,我以往會有以下幾種作法:apache
寫死在Java code中,環境發生變化的時候修改Java code編程
寫在名爲*.properties的配置文件裏,使用Java讀取配置文件api
然而今天咱們將引入一種高級的方式來進行配置信息的管理,那即是JMX的引入。
框架
JMX作爲一份規範,JDK中提供了JMX接口,所以安裝了JDK後就能夠開發基於JMX的代碼了。
編輯器
JMX具備兩層結構,各層的組件以下工具
工具層學習
Mbeansui
通知模型:Notification、NotificationListenerspa
Mbeans與數據類:Attribute、Operator
代理層
MBean Server
代理服務
下面學習下log4j2對JMX的支持
Log4j 2 開始支持 JMX. StatusLogger, ContextSelector, 和全部的 LoggerContexts, LoggerConfigs 以及 Appenders 使用了MBeans而且能夠被遠程檢測和控制.
默認狀況下JMX是生效的。當log4j初始化的時候StatusLogger, ContextSelector, 以及全部的LoggerContexts, LoggerConfigs 和Appenders 使用了 MBeans. 當啓動JVM時若是想禁用掉JMX則須要在系統配置文件中添加 log4j2.disable.jmx=true .
本地監視不須要修改任何系統配置文件。使用Java裏自帶的JConsole工具便可監視你的應用,當安裝完JDK以後並配置了環境變量,只須要在終端執行如下命令便可打開可視化的監視界面。
jconsole
要使遠程監視應用有效則須要在啓動JVM以前在系統配置文件中添加一下配置.
com.sun.management.jmxremote.port=portNum
其中portNum即指遠程應用的端口。
下面則是Log4j Mbeans在jconsole裏的一段截圖.
Log4j包含了基本的可視化組件,能夠監視 StatusLogger 輸出以及遠程修改Log4j 配置.該客戶端能夠被看成單獨的應用運行,也能夠做爲JConsole的插件使用。
看成JConsole插件
使用下面的命令啓動jconsole
%JAVA_HOME%\bin\jconsole -pluginpath \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar
執行完上述命令後你將能夠看到下面包含log4j2標籤頁的界面
這個GUI工具也包含了簡單的編輯器用於編輯log4j配置信息。以下圖所示
執行下面的命令
%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui <options>
上面的options能夠爲下面三項中的一項
<host>:<port>
service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi
service:jmx:rmi://<host>:<port>/jndi/rmi://<host>:<port>/jmxrmi
此處不得不注意端口號必須與啓動應用時所指定的JMX端口號一致
例如在啓動應用的時候指定JVM參數信息以下:
com.sun.management.jmxremote.port=33445 com.sun.management.jmxremote.authenticate=false com.sun.management.jmxremote.ssl=false
緊接着執行下面的命令:
%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui localhost:33445
下面則是相關的兩個示例圖片:
本文只是進行了簡單介紹,使用過程當中遇到的問題將在後續進行說明。