本文參考 http://www.reibang.com/p/414647c1179e ;因為jmx配置都是按照下面的步驟:但是同時我遇到兩個問題:
一:離線分析JMX里面函數(shù)執(zhí)行情況加上:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
二: 本地一直聯(lián)系不上分析的服務(wù)器,然后加上這句:-Djava.rmi.server.hostname=host ip ;然后就可以了
JMX全稱Java Management Extensions, 為Java應(yīng)用提供管理擴(kuò)展功能煤伟。在Java 5的時候引入
概念
Name
Description
MBean
全稱為Managed Bean, 你可以實現(xiàn)一個MBean來JMX提供管理內(nèi)容
MBean Server(也叫JMX Agent)
提供集中注冊管理MBean功能,允許遠(yuǎn)程通過他代理操作MBean
JMX Connectors
通過實現(xiàn)不同的通訊協(xié)議,來允許遠(yuǎn)程訪問
Jconsole
一款JMX圖形客戶端薄扁,運(yùn)行用戶訪問本地或者遠(yuǎn)程的JMX缠黍,默認(rèn)包含在Java SDK工具中
Referering Java Opts
啟動Java可以賦予JVM Machine一些參數(shù),例如設(shè)置運(yùn)行內(nèi)存堆棧的大小萝挤。此處列舉一些有關(guān)JMX的相關(guān)參數(shù)
參數(shù)名
類型
描述
-Dcom.sun.management.jmxremote
布爾
是否支持遠(yuǎn)程JMX訪問放吩,默認(rèn)true
-Dcom.sun.management.jmxremote.port
數(shù)值
監(jiān)聽端口號智听,方便遠(yuǎn)程訪問
-Dcom.sun.management.jmxremote.authenticate
布爾
是否需要開啟用戶認(rèn)證,默認(rèn)開啟
-Dcom.sun.management.jmxremote.ssl
布爾
是否對連接開啟SSL加密,默認(rèn)開啟
-Dcom.sun.management.jmxremote.access.file
路徑
對訪問用戶的權(quán)限授權(quán)的文件的路徑渡紫,默認(rèn)路徑JRE_HOME/lib/management/jmxremote.access
-Dcom.sun.management.jmxremote. password.file
路徑
設(shè)置訪問用戶的用戶名和密碼到推,默認(rèn)路徑JRE_HOME/lib/management/ jmxremote.password
例如,你需要啟動一個常駐后臺的springboot程序(比如app.jar)惕澎,如何開啟一個支持遠(yuǎn)程訪問的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
對于關(guān)于JMX相關(guān)的參數(shù)你配置這些就夠了,就可以使用Jconsole連接集灌,
Jconsole Panel
這個僅僅限于你在本地訪問悔雹,也就是說遠(yuǎn)程訪問。
你需要支持遠(yuǎn)程訪問協(xié)議欣喧,也就是前面描述的JMX Connector,可以添加一個參數(shù)
-Djava.rmi.server.hostname=服務(wù)器的IP地址或者域名
就可以開啟遠(yuǎn)程RMI協(xié)議訪問梯找,正常情況此時應(yīng)該就能正乘舭ⅲ看到類似下面的界面
JMX Runtime
不過在我的工作做,此時發(fā)現(xiàn)仍然不能再遠(yuǎn)程訪問锈锤,查詢了相關(guān)資料后驯鳖,有可能是防火墻的原因屏蔽了相關(guān)接口。在Java啟動時久免,JMX會綁定一個接口浅辙,RMI也會綁定一個接口,在復(fù)雜網(wǎng)絡(luò)環(huán)境下阎姥,有可能你通過打開防火墻允許了JMX端口的通過记舆,但是由于沒有放行RMI,遠(yuǎn)程連接也是會失敗的呼巴。
這是因為JMX在遠(yuǎn)程連接時泽腮,會隨機(jī)開啟一個RMI端口作為連接的數(shù)據(jù)端口,很有可能這個端口會被防火墻給阻止衣赶,以至于連接超時失敗诊赊。好在在Java7u25版本后可-Dcom.sun.management.jmxremote.rmi.port=端口號
來定死這個端口,好消息是府瞄,你可以將這個端口和jmx.port
的端口設(shè)置成一個端口碧磅,這樣防火墻策略就只需要同行一個端口就可以了。
額外內(nèi)容:
Sample for authtication
password filemonitorRole password1controlRole password2
access filemonitorRole readonlycontrolRole 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