前言
因為最近一個項目部署在客戶那邊運行一個月左右就會出現java記憶體溢出的問題,為了時時監控java記憶體的情況需要,需要遠程查看伺服器上java記憶體的一些情況。在公司模擬部署了遠程監視linux下項目啟動並執行情況。
一、簡單介紹兩個jdk1.6內建的可視化監視工具
Jconsole:Java 6.x採用JMX方式提供了一系列監視和管理虛擬機器的API,隨SDK一起發布的JConsole則是採用這些API實現監控虛擬機器的使用工具。 JConsole能夠提供被監控虛擬機器的記憶體、線程、類的載入以及MBean等資訊,從而能夠對伺服器的運行情況進行即時監控。
JVisualVM: 是Netbeans的profile子項目,已在JDK6.0 update 7 中內建(java啟動時不需要特定參數,監控工具在bin/jvisualvm.exe),能夠監控線程,記憶體情況,查看方法的CPU時間和記憶體中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。
二,如果是win系列的電腦查看原生記憶體情況,直接找到jdk的安裝路徑雙擊上面提到的可視化監視工具即可
三,如果是想監視遠端java記憶體的情況可要做一些相應的配置 運行環境
伺服器:Redhat6.0 + JDK 1.6+ Jboss 5.1
ip地址:192.168.1.250
客戶機:Windows + JDK 1.6
2. 不帶使用者名稱密碼的參數配置(很簡單),只需要修改jboss中bin下的run.sh。在該句下邊添加上紅色字跡的部分即可
JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.1.250"
注意:
1、9999表示監控的連接埠號碼,確保指定的連接埠不被佔用;
2、可以採用netstat -an來查看已經佔用的連接埠;
3、配合lsof -i:portnum 來查看佔用連接埠的具體應用程式;
4、另外如果開啟了防火牆服務,請確保連接埠能夠透過防火牆訪問;
5、192.168.1.250為當前伺服器的IP;
3. 啟動JBoss伺服器
./run.sh -b 192.168.1.250 & 必須通過-b參數指定Jboss伺服器綁定的地址;
允許所有使用者串連 則為 -b 0.0.0.0
4, 串連遠程虛擬機器
啟動本機%JAVA_HOME%\bin目錄下的JConsole,
在彈出對話方塊的“遠程進程:”一欄中,輸入192.168.1.250:9999,然後點擊“串連”,如下圖所示:
附加:帶使用者名稱密碼的參數配置
一,修改jboss中bin下的run.sh。在該句下邊添加上紅色字跡的部分
JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.1.250"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=/usr/java/jdk1.6/jre/lib/management/jmxremote.password"
注意 $JAVA_HOME/jre/lib/management/jmxremote.password 中 jmxremote.password是由原來的jmxremote.password.template複製一份得到,
去掉 monitorRole QED前面的# 如果不做修改 登入的使用者名稱:monitorRole 密碼:QED (可根據需要修改使用者名稱密碼,但是如果做修改也要同
是修改jmxremote.access中的相對應名字的許可權
二,如果啟動過程中出現這個問題或者錯誤
則是因為jmxremote.password 的許可權問題 在該檔案路徑下執行:chmod 600 jmxremote.password
重新按照3啟動項目即可。
四,對於JVisualVM而言在 樹結構的 Remote中添加遠程ip,然後右鍵該ip添加JMX連結添加上連接埠號碼和使用者名稱密碼即可連結成功,如圖所示: