(十)java虚拟机性能监控工具

一、 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); 这里,执行三次就有三个进程

 二、jstack

  •  jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

 

  • 命令行参数选项说明如下:

 

 三、jstat:类装载、内存、垃圾手机、JIT编译的信息

  • 语法格式如下:

  • vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。

结果

  解释结果图各列含义

 四、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同时开启

  •  查看控制台,结果如下:

 五、jmap

  •  jmap是输出内存中对象的工具,甚至可以将VM 中的heap以二进制输出成文本。可以监控JAVA程序是否有内存泄漏。
  •  两种使用方法:

一、jmap -histo PID在内存使用峰值前后分别dump一次,可以对比出GC回收了哪些对象。

二、jmap -dump:format=b,file=f1 PID 将该内存heap输出到f1文件里,配合eclipse插件MemoryAnalyzer来使用

原文地址:https://www.cnblogs.com/shyroke/p/8305106.html