1. 程式人生 > >配置Java遠端監控授權(Java Mission Control)

配置Java遠端監控授權(Java Mission Control)

最近公司做的專案有比較嚴重的記憶體溢位問題,也不知道是榮幸還是鬱悶,經理將該問題交給我去自處理,經過一系列的Google,最終決定用Java Mission Control(JMC)來查詢專案的記憶體溢位問題出在哪。

Java Mission Control(JMC)最先是由BEA公司開發的JRockit(後被Oracle收購)所附帶的一個用於查詢Java記憶體溢位問題的利器,在最近的Java8中,預設已經帶上了此元件,掌握好JMC的使用能讓你在處理記憶體溢位問題是如魚得水。

JMC介面

JMC的使用以後再說,現在先配置伺服器端(也就是說你要監控的物件),配置JMC主要就是在啟動Java程式的時候加上一系列引數(以Tomcat為例,在catalina.bat

catalina.sh中增加如下配置):

CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8901

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=true

-Dcom.sun.management.jmxremote.password.file=jmxremote.password

-Dcom.sun.management.jmxremote.access.file=jmxremote.access

-Djava.rmi.server.hostname=172.16.41.89"

需要注意幾點:

  1. 如果要允許其它機器監控該程式,必須指定-Djava.rmi.server.hostname=,如果不指定該配置,那麼就只能在本機監控該程式。
  2. 如果要控制監控的授權(讓特定的使用者才能連線JMX服務),需要設定-Dcom.sun.management.jmxremote.authenticate=true,如果設定為false則不需要授權。
  3. 如果要授權,需要指定兩個檔案:jmxremote.password和jmxremote.access,password檔案主要是配置使用者名稱和密碼,access主要是配置許可權(可讀或者讀寫)。

在Tomcat的bin目錄下增加下面兩個檔案:jmxremote.password和jmxremote.access,格式如下:

jmxremote.access:

admin readwrite

monitor readonly

表示admin有操作許可權(比如呼叫GC等操作),monitor只有檢視許可權,不能進行任何操作。

jmxremote.password:

admin test

monitor test

表示有兩個使用者,admin和monitor,密碼分別是test和test。

配置好這些引數後,執行sudo ./startup.sh就可以啟動Tomcat了,啟動Tomcat後,在客戶機上啟動JMC客戶端,然後建立一個新的連線:

如上圖所示,在Host上填入IP或者域名,Port填上你配置的埠號。如果你啟用了授權機制,在User和Password中填入相應的欄位就可以了。Connection name可以填入一個你認為比較好記的字串,一切填入妥帖後,點選Test Connection就可以測試一下是否正確,如果不正確,請回到伺服器端配置了引數,測試成功點選Finish即可。