(十)java虛擬機性能監控工具

1、 jps(Java Virtual Machine Process Status Tool)  

  • jps主要用來輸出JVM中運行的進程狀態信息。語法格式以下:

  • 命令行參數選項說明以下:

 

  1.1  案例

public class StackOnTest {  
    public static void alloc() {  
        byte[] b = new byte[2];  
        b[0] = 1;  
    }  
  
    public static void main(String[] args) {  
       Scanner sc=new Scanner(System.in);
       sc.nextLine();
    }  
  
}  
  • 上述代碼執行三次,就有三個進程,注意此時不能在console裏輸入信息,這樣程序就會卡在 Scanner sc=new Scanner(System.in); 這裏,執行三次就有三個進程

 

 

 2、jstack

  •  jstack主要用來查看某個Java進程內的線程堆棧信息。語法格式以下:

 

  • 命令行參數選項說明以下:

 

 

 

 

 3、jstat:類裝載、內存、垃圾手機、JIT編譯的信息

  • 語法格式以下:

  • vmid是Java虛擬機ID,在Linux/Unix系統上通常就是進程ID。interval是採樣時間間隔。count是採樣數目。

結果eclipse

  解釋結果圖各列含義jvm

 

 

 4、jinfo:實時查看和調整虛擬機的各項參數

  • jinfo使用介紹
能夠用來查看正在運行的Java應用程序的擴展參數,甚至支持在運行時,修改部分參數
-flag <name> pid:打印指定JVM的參數值 
-flag [+|-]<name> pid:設置指定JVM參數的布爾值
-flag <name>=<value> pid:設置指定JVM參數的值

  4.1  案例

public class JInfoTest {
    private static void s2() {
        String name = ManagementFactory.getRuntimeMXBean().getName();
        // get pid
        String pid = name.split("@")[0];
        System.out.println("Pid is:" + pid);

        while (true) {
            byte[] b = null;
            for (int i = 0; i < 10; i++)
                b = new byte[1 * 1024 * 1024];

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        s2();
    }
}
  • 設置jvm啓動參數,以下:

 

  •  運行程序,此時結果以下:

 

  • 使用jinfo,修改jvm參數

 

有一點必須注意:PrintGC必須開啓,只開啓PrintGCDetails、PrintGCTimeStamps不會輸出GC,必須PrintGC同時開啓工具

 

  •  查看控制檯,結果以下:

 

 5、jmap

  •  jmap是輸出內存中對象的工具,甚至能夠將VM 中的heap以二進制輸出成文本。能夠監控JAVA程序是否有內存泄漏。
  •  兩種使用方法:

1、jmap -histo PID在內存使用峯值先後分別dump一次,能夠對比出GC回收了哪些對象。spa

2、jmap -dump:format=b,file=f1 PID 將該內存heap輸出到f1文件裏,配合eclipse插件MemoryAnalyzer來使用插件

相關文章
相關標籤/搜索