如何配置visualvm監控
我們經常需要對我們的開發的軟件做各種測試, 軟件對系統資源的使用情況更是不可少, 目前有多個監控工具,相比JProfiler對系統資源尤其是內存的消耗是非常龐大,JDK1.6開始自帶的VisualVM就是不錯的監控工具。這個工具就在JAVA_HOME\bin\目錄下的jvisualvm.exe, 雙擊這個文件就能看到一個比較直觀的界面

從上圖中的左邊Applications樹中可以知道,不光可以監控本地JVM運行情況, 還可以監控遠程機器上的JVM運行情況。
本地監控:只要打開某個JAVA程序就會自動的加入到本地監控中。
要進行遠程監控, 本機的VisualVM就必須和遠程的JVM要進行通信, visualVM目前支持兩種remote connection方式,分別是jstatd和JMX方式:

一、通過JMX連接遠程機器, 需要經過下面的配置:
1. 修改遠程機器JDK配置文件 (我這里遠程機器是linux).
a.進入JAVA_HOME\jre\lib\management\目錄
b.拷貝jmxremote.password.template這個文件到當前目錄, 並改名為jmxremote.password
c.打開jmxremote.password文件,去掉 # monitorRole QED 和 # controlRole R&D 這兩行前面的注釋符號
2. 修改遠程機器上需要被監控的程序的配置文件 (我這里是監控Tomcat容器內部署的應用).
a.進入TOMCAT_HOME\bin目錄
b.打開catalina.sh文件,加入如下信息:
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=10.202.37.75
-Dcom.sun.management.jmxremote.port=18999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
c.重啟Tomcat服務.
3. 客戶端VisualVM配置 (我客戶端用的是WinXP).
a.直接右擊Remote,選擇Add Remote Host...

b.在彈出的界面中輸入遠程機器的IP地址(10.202.37.75),這個IP地址會加入到Remote節點下.
c.反鍵點擊這個IP地址,選擇Add JMX Connection, 在彈出的界面中輸入剛配置的端口號(18999), 這個連接會加入到該IP節點下.

d.反鍵點擊這個連接,選擇Open.
此時就可以看到監控的界面, 從界面上我們可以看到CPU信息, 內存信息, 統計加載類數量,線程信息.

二、通過jstatd連接
遠程機器需要啟動一個daemon:jstatd
1、遠程機器啟動jstatd
1.1、首先需要准備一個java.policy文件,保存到如/home/admin/jstatd.java.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
1.2、啟動jstatd(通過如下命令行啟動)
jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-Djava.rmi.server.logCalls=true
1.3、 同時需要執行一個命令看看(linux需要)
Hostname –i 如果顯示是127.0.0.1,則需要修改/etc/hosts文件,去掉對本機名的配置,讓本機名解析到它的IP地址,如10.20.131.214
2、連接遠程機器

3、點擊OK,看到會連接到遠程機器,並顯示出它下面的java進程。

linux服務器上啟動的java程序的pid為:

到 這個時候的操作,就和上面Local的描述操作一樣了。
最后,要注意的地方:
最好使用jdk1.6以上版本,不然visualVM很多功能不能用。
你自己也可以寫一個VisualVM插件(基於NetBeans的插件體系),完成特殊的任務。
