VisualVM遠程監(jiān)控
VisualVM是集成了多個JDK命令工具的一個可視化工具,它主要用來監(jiān)控JVM的運行情況,可以用它來查看和瀏覽Heap Dump、Thread Dump、內(nèi)存對象實例情況、GC執(zhí)行情況、CPU消耗以及類的裝載情況。
在JDK Update7之后,VisualVM作為JDK的一部分發(fā)布,但同時VisualVM也發(fā)布獨立的版本。VisualVM必須運行在JDK1.6以上的VM環(huán)境下,但可以用它來監(jiān)控JDK1.4以上的JVM。
下載地址:https://visualvm.dev.java.net/files/documents/7163/144406/visualvm_12.zip
一,監(jiān)控本機JVM
如果要監(jiān)控本機的JVM運行情況,只要打開VisualVM,JVM會自動被添加到VisualVM中進行監(jiān)控
如上圖,VisualVM本身也是一個Java應(yīng)用程序,因此它自己監(jiān)控自己JVM的運行情況,只要雙擊Local –> VisaulVM,右邊就可以進行各項指標的瀏覽。
注:讀者看到的標簽可能會隨著安裝的插件不同而有所區(qū)別,VisualVM的插件可以通過Tools –> Plugins 來安裝
二,監(jiān)控遠程JVM
VisualVM監(jiān)控遠程JVM是通過RMI服務(wù)器來實現(xiàn)的,因此需要在被監(jiān)控的遠程服務(wù)器上啟動RMI服務(wù)
1,啟動RMI服務(wù)
在需要被監(jiān)控的服務(wù)器上面,通過jstatd 來啟動RMI服務(wù)
首先,配置java安全訪問,將如下的代碼存為文件 jstatd .all.policy:
Java代碼
- grant codebase "file:${java.home}/../lib/tools.jar" {
- permission java.security.AllPermission;
- };
然后通過如下的命令啟動RMI服務(wù):
Java代碼
- jstatd -J -Djava.security.policy=jstatd.all.policy
上面啟動的RMI服務(wù)的端口是1099,如果需要以其它端口啟動RMI服務(wù),請查看官方文檔:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstatd .html
2,啟動VisualVM,添加遠程主機
右鍵單擊Remote,選擇Add Remote Host,輸入遠程主機的地址
如果遠程服務(wù)器啟動了RMI服務(wù),VisualVM會自動顯示主機上面的JVM
關(guān)于VisualVM連接遠程JVM的錯誤,請查看Troubleshooting connection problems in JConsole 一 文,此文總結(jié)了連接時會遇到的各種問題,我開始通過VisualVM連接虛擬機中的JVM,總是 報:java.net.ConnectException: Connection refused: connect 錯誤,也是通過文章中所描述的關(guān)于通過NAT訪問JVM問題解決的。