1. 程式人生 > >如何使用JDK自帶的jvisualvm監控java程式【Java HotSpot(TM)】

如何使用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