使用Java visualVM的緣由:html
體積小,不耗內存,操做簡單,功能全。關於Java visualVM和其餘性能測試工具的比較,網上有不少文章,去搜搜看吧。java
1. 在服務器上配置jstatd的security policy文件。shell
jstatd是一個監控JVM(Java Virtual Machine,Java虛擬機)從建立到銷燬過程當中資源佔用狀況,並提供遠程監控接口的RMI(Remote Method Invocation,遠程方法調用)服務程序,它是一個Deamon程序,要保證遠程監控軟件鏈接到本地的話,須要始終保持jstatd運行。jstatd運行須要經過-J-Djava.security.policy=(某個文件的路徑名,這個文件指定了安全策略)。所以咱們須要在服務器上創建這個文件,文件可隨意起名,這裏我取名爲jstatd.policy。文件內容必須以下:安全
grant codebase "file:${java.home}/../lib/tools.jar"{ permission java.security.AllPermission; };
注意,這裏不建議進行復制,建議手敲一遍,避免由於半角和圓角符號致使錯誤。另外,內容必須如此,不然報錯,提示沒有權限:服務器
Could not create remote object access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" at......
2. 修改服務器hosts文件中的IP地址工具
要使Java visualVM成功鏈接到服務器上,服務器端因該在/etc/hosts文件中把本機地址設置爲實際的IP地址(好比192.168.3.123),而不是127.0.0.1。能夠先使用hostname -i查看,再用vi修改性能
3. 在用於查看服務器的機器上啓動JvisualVM測試
1.先安裝JvisualVM:加密
sudo apt-get install jvisualvm
2.運行JvisualVM,注意這裏須要加上Java的路徑:命令行
jvisualvm --jdkhome ${JAVA_HOME}
注意:${JAVA_HOME}是指在Ubuntu系統中JDK的環境變量
4. 在服務器上運行jstatd程序
jstatd -J-Djava.security.policy=jstatd.policy
注意:這裏的jstatd.policy即爲剛剛建立的關於安全策略的文件名,還須要指定這個文件的路徑,好比:/usr/lib/jstatd.policy
若是還須要RMI日誌功能的話,還能夠加上啓動參數-J-Djava.rmi.server.logCalls:
jstatd -J-Djava.security.policy=jstatd.policy -J-Djava.rmi.server.logCalls=true
以後就能夠查看這臺服務器上的JVM運行狀況了
5. 經過Java JvisualVM鏈接到服務器
在Java visualVM程序窗口左側「遠程」項目右鍵選擇「添加遠程主機」,在彈出的對話框中輸入遠程主機的IP地址,確認提交之後能夠看到相應的主機和運行在上面的Java程序,鏈接成功後會顯示該主機上運行的Jstatd機器PID。
經過以上方式鏈接服務器有一個問題,不能監控服務器的CPU使用狀況,提示咱們創建JMX,查閱資料發現,能夠在服務器啓動jstatd加入JMX的參數:
jstatd -J-Djava.rmi.server.hostname=192.168.3.123 -J-Djava.security.policy=jstatd.policy -J-Dcom.sun.management.jmxremote.port=4444 -J-Dcom.sum.management.jmxremote.ssl=false -J-Dcom.sun.management.jmxremote.authenticate=false
注意:上述腳本爲一句,就是一行,不要自行換行,不然不能啓動jstatd。其中:
-J-Djava.rmi.server.hostname表示服務器的地址;
-J-Djava.security.policy表示使用的安全策略文件路徑;
-J-Dcom.sun.management.jmxremote.port表示暴露服務器JVM給其餘機器的端口號;
-J-Dcom.sum.management.jmxremote.ssl=false表示對RMX傳輸不加密
-J-Dcom.sun.management.jmxremote.authenticate=false表示其餘機器鏈接服務器時不須要驗證,若爲true,則在鏈接服務器時須要輸入密碼
這段腳本會阻塞當前的命令行,若是不想其阻塞,能夠在最後打個空格,再加個&符號便可,此時這條命令會被看成做業添加到後臺啓動:
jstatd -J-Djava.rmi.server.hostname=192.168.3.123 -J-Djava.security.policy=jstatd.policy -J-Dcom.sun.management.jmxremote.port=4444 -J-Dcom.sum.management.jmxremote.ssl=false -J-Dcom.sun.management.jmxremote.authenticate=false &
這樣啓動後怎麼中止?請看這裏:http://soft.chinabyte.com/os/379/12244379.shtml
有了上述步驟後,你就能夠對遠程服務器的JVM瞭如指掌了。