使用Java自帶的jvisualvm調試Java程序,可以查看CPU、內存、類及線程等信息,還可以進行Dump,無疑是一個利器
由於客戶端是Windows、服務端是Linux,並且是最小安裝的Linux,沒有圖形界面,因此需要進行遠程調試
一、客戶端:Windows
打開%JAVA_HOME%/bin/jvisualvm.exe,在“遠程”節點,右鍵,“添加遠程主機”,如下所示:
輸入主機IP地址,修改顯示名,點擊確定,如下所示:
二、服務端:Linux
在$JAVA_HOME/bin/下新建策略文件:
[teld@T-SHA1-FLK-01 bin]$ touch jstatd.all.policy [teld@T-SHA1-FLK-01 bin]$ vi jstatd.all.policy
輸入如下內容:
grant codebase "file:/usr/java/default/lib/tools.jar" { permission java.security.AllPermission; };
啟動jstatd:
[teld@T-SHA1-FLK-01 bin]$./jstatd -J-Djava.security.policy=./jstatd.all.policy
這時在客戶端即可看到服務端上運行的所有Java程序了,如下所示:
雙擊某一個Java程序節點,可以看具體的CPU、內存、類及線程信息
三、遇到的坑
3.1 插件安裝
jvisualvm可以安裝插件,但是使用時,發現默認的插件提供網站已經不能用了:
通過瀏覽器直接訪問,發現網站已經不能用了:
http://www.oracle.com/splash/java.net/maintenance/index.html
新地址已經遷移到github:
https://visualvm.github.io/pluginscenters.html
根據版本下載對應的插件到本地,然后通過本地安裝即可,以安裝Visual GC為例,如下所示:
安裝完后,可以發現多了一個Visual GC的Tab頁:
可以很直觀的觀察JVM里的內存分配
3.2 CPU查看、抓取Dump
使用這種遠程的方式,沒法查看CPU、沒法抓取Dump,因此局限性很大,還是應該使用本地的方式比較穩妥