JMX全稱Java Management Extensions, 為Java應用提供管理擴展功能。在Java 5的時候引入
概念
Name | Description |
---|---|
MBean | 全稱為Managed Bean, 你可以實現一個MBean來JMX提供管理內容 |
MBean Server(也叫JMX Agent) | 提供集中注冊管理MBean功能溜嗜,允許遠程通過他代理操作MBean |
JMX Connectors | 通過實現不同的通訊協(xié)議祖很,來允許遠程訪問 |
Jconsole | 一款JMX圖形客戶端,運行用戶訪問本地或者遠程的JMX,默認包含在Java SDK工具中 |
Referering Java Opts
啟動Java可以賦予JVM Machine一些參數,例如設置運行內存堆棧的大小。此處列舉一些有關JMX的相關參數
參數名 | 類型 | 描述 |
---|---|---|
-Dcom.sun.management.jmxremote | 布爾 | 是否支持遠程JMX訪問比肄,默認true |
-Dcom.sun.management.jmxremote.port | 數值 | 監(jiān)聽端口號,方便遠程訪問 |
-Dcom.sun.management.jmxremote.authenticate | 布爾 | 是否需要開啟用戶認證,默認開啟 |
-Dcom.sun.management.jmxremote.ssl | 布爾 | 是否對連接開啟SSL加密囊陡,默認開啟 |
-Dcom.sun.management.jmxremote.access.file | 路徑 | 對訪問用戶的權限授權的文件的路徑芳绩,默認路徑JRE_HOME/lib/management/jmxremote.access
|
-Dcom.sun.management.jmxremote. password.file | 路徑 | 設置訪問用戶的用戶名和密碼,默認路徑JRE_HOME/lib/management/ jmxremote.password
|
例如关斜,你需要啟動一個常駐后臺的springboot程序(比如app.jar)示括,如何開啟一個支持遠程訪問的JMX,可以嘗試下面的命令
java -jar app.jar \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=10080 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false
對于關于JMX相關的參數你配置這些就夠了痢畜,就可以使用Jconsole連接垛膝,
Jconsole Panel
這個僅僅限于你在本地訪問鳍侣,也就是說遠程訪問。
你需要支持遠程訪問協(xié)議吼拥,也就是前面描述的JMX Connector倚聚,可以添加一個參數
-Djava.rmi.server.hostname=服務器的IP地址或者域名
就可以開啟遠程RMI協(xié)議訪問,正常情況此時應該就能正吃淇桑看到類似下面的界面
JMX Runtime
不過在我的工作做惑折,此時發(fā)現仍然不能再遠程訪問,查詢了相關資料后枯跑,有可能是防火墻的原因屏蔽了相關接口惨驶。在Java啟動時,JMX會綁定一個接口敛助,RMI也會綁定一個接口粗卜,在復雜網絡環(huán)境下,有可能你通過打開防火墻允許了JMX端口的通過纳击,但是由于沒有放行RMI续扔,遠程連接也是會失敗的。
這是因為JMX在遠程連接時焕数,會隨機開啟一個RMI端口作為連接的數據端口纱昧,很有可能這個端口會被防火墻給阻止,以至于連接超時失敗堡赔。好在在Java7u25版本后可-Dcom.sun.management.jmxremote.rmi.port=端口號
來定死這個端口识脆,好消息是,你可以將這個端口和jmx.port
的端口設置成一個端口加匈,這樣防火墻策略就只需要同行一個端口就可以了存璃。
額外內容:
Sample for authtication
# password file
monitorRole password1
controlRole password2
# access file
monitorRole readonly
controlRole readwrite
References
- http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
- http://stackoverflow.com/questions/20884353/why-java-opens-3-ports-when-jmx-is-configured/21552812#21552812
- http://stackoverflow.com/questions/7163173/jmx-enabled-java-application-appears-to-open-a-random-high-order-port-when-jmx-c
- http://jingyan.baidu.com/article/acf728fd3c568af8e410a37a.html