如何使用JDK自帶的jvisualvm監控java程式【Java HotSpot(TM)】
這篇文章僅針對HostSpot虛擬機器
第一步,寫一個測試的policy檔案,命名為test.policy,指定可以訪問tools.jar,內容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
第二步,編寫一個測試程式TestJVisualVM.java:
import java.util.HashMap; import java.util.Map; /** * * 測試jvisualvm的監控功能 * */ public class TestJVisualVM { public static void main(String[] args) throws InterruptedException { // 模擬佔用資源的部分 for(int i = 0; i < 100; i++){ Map<String, String> map = new HashMap<String, String>(); map.put("" + i, "" + i); Thread t = new Thread(){ public void run(){ try { Thread.sleep(200 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); // sleep 1s Thread.sleep(1000); } } }
第三步,編譯:
javac -encoding utf8 TestJVisualVM.java
第四步,執行:
java -Djava.security.policy=test.policy -Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote.port=10990 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false TestJVisualVM
第五步,配置jvisualvm
先新增遠端主機,再新增遠端JMX埠,埠要和啟動檔案中-Dcom.sun.management.jmxremote.port=10990
點選OK後雙擊,如果看到下圖就說明配置正常了:
如果看到錯誤:
檢查埠,如果顯示0 :::10990
檢查引數:-Djava.net.preferIPv4Stack=true
[[email protected] dubbo-antifraud]$ netstat -an | grep 10990
tcp 0 0 :::10990 :::* LISTEN
如果看到下面的監聽,應該就能正常訪問了:
[[email protected] dubbo-antifraud]$ netstat -an | grep 10990
tcp 0 0 0.0.0.0:10990 0.0.0.0:* LISTEN