JVM监控及诊断工具(命令行)

目录

环境

jdk11

jps

  1. jps(Java Process Satus):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。
  2. 基本语法:jps [options] [hostid]
    JVM监控及诊断工具(命令行)
  3. options
    3.1 -q: 只显示本地虚拟机唯一id
    JVM监控及诊断工具(命令行)
    3.2 -l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
    JVM监控及诊断工具(命令行)
    3.3 -m:输出虚拟机进程启动时传递给主类main()的参数
    JVM监控及诊断工具(命令行)
    3.4 -v:输出虚拟机进程启动时的JVM参数
    JVM监控及诊断工具(命令行)
    3.5 以上参数可用综合使用
    3.6 如果Java进程关闭了默认开启的UsePerfData参数,及-XX:-UsePerfData,那么jps无法探知该Java进程
  4. hostid:RMT注册表注册的主机名,如果想要远程监控主机上的java程序,需要安装jstatd

jstat

  1. jstat(JVM Statistics Monitoring Tool),监视虚拟机各种运行状态信息的命令行工具
  2. 在没有GuI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题
  3. 官网地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
  4. 基本语法:jstat -
public class Demo01 {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String next = scanner.next();
  }
}

5.1 -class:显示ClassLoader的相关信息
JVM监控及诊断工具(命令行)
5.2 -gc: 显示与GC相关的信息
JVM监控及诊断工具(命令行)
5.3 -gccapacity:显示内容基本与-gc相同,输出主要关注Java堆各个区域使用到的最大、最小空间
JVM监控及诊断工具(命令行)
5.4 -gcutil:显示内容基本与-gc相同输出主要关注已使用空间占总空间的百分比
JVM监控及诊断工具(命令行)
5.5 -gccause:与-gcutil功能一样,会额外输出导致最后一次或当前正在发生的GC产生的原因
JVM监控及诊断工具(命令行)
5.6 -gcnew:显示新生代GC状况
JVM监控及诊断工具(命令行)
5.7 -gcnewcapacity:显示内容基本与-gcnew相同,输出主要关注使用到的最大、最小空间
JVM监控及诊断工具(命令行)
5.8 -gcold:显示老年代GC状况
JVM监控及诊断工具(命令行)
5.9 -gcoldcapacity:显示内容基本与-gcold相同,输出主要关注使用到的最大、最小空间
JVM监控及诊断工具(命令行)
5.10 -compiler:显示JIT编译器编译过的方法、耗时等信息
JVM监控及诊断工具(命令行)
5.11 -printcompilation:输出已经被JIT编译过的方法
JVM监控及诊断工具(命令行)
6. interval:以指定单位、秒(s) 或毫秒(ms) 表示的采样间隔。默认单位是毫秒。必须是正整数。指定后,该jstat命令会在每个时间间隔生成其输出
JVM监控及诊断工具(命令行)
7. count:用于指定查询的总次数
JVM监控及诊断工具(命令行)
8. -t参数:可以在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒
我们可以比较Java进程的启动时间以及总GC时间(GCT 列),或者两次测量的间隔时间以及总 GC时间的增量,来得出GC时间占运行时间的比例。如果该比例超过20%,则说明目前堆的压力较大;如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。|
JVM监控及诊断工具(命令行)
9. -h参数:可以在周期性数据输出时,输出多少行数据后,输出一个表头信息
JVM监控及诊断工具(命令行)

jinfo

  1. 官方文档:https://docs.oracle.com/en/java/javase/11/tools/jinfo.html
  2. jinfo(Configuration Info for Java): 查看虚拟机配置参数信息。此命令是实验性的,不受支持。对于核心文件,使用jhsdb jinfo
  3. 语法:jinfo
  4. options
    4.1 默认输出全部的参数和系统属性
    JVM监控及诊断工具(命令行)
    4.2 -flag name:输出对应名称的参数
    JVM监控及诊断工具(命令行)
    4.3 -flag[+-]name:启用或禁用指定的布尔命令行标志,只有被标记为manageable的参数才可以被动态修改
    JVM监控及诊断工具(命令行)

JVM监控及诊断工具(命令行)
4.4 -flag name = value:设置name的值
JVM监控及诊断工具(命令行)
4.5 -flags:输出全部参数
JVM监控及诊断工具(命令行)
4.6 -sysprops:输出系统属性
JVM监控及诊断工具(命令行)
4.7:java -XX:+PrintFlagsInitial:查看所有JVM参数启动的初始值
JVM监控及诊断工具(命令行)
4.8 java -XX:+PrintFlagsFinal:查看所有JVM参数的最终值
JVM监控及诊断工具(命令行)
4.9 java -XX:+PrintCommandLineFlags:查看被用户或JVM设置过的参数的信息
JVM监控及诊断工具(命令行)

jmap

  1. jmap(JVM Memory Map):获取dump文件、目标Java进程的内存相关信息(包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等)
  2. 官方文档:https://docs.oracle.com/en/java/javase/11/tools/jmap.html
  3. JVM监控及诊断工具(命令行)
  4. options
    4.1 -dump:生存dump文件
    4.1.1 live— 指定时,仅转储活动对象;如果未指定,则转储堆中的所有对象。
    4.1.2 format=b— 转储 Java 堆为hprof二进制格式
    4.1.3 file=filename — 将堆转储到 filename
 public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    while (true) {
      list.add(new String());
      try {
        Thread.sleep(500);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

JVM监控及诊断工具(命令行)

JVM监控及诊断工具(命令行)
4.2 -dump:live:只保存堆中的存活对象
JVM监控及诊断工具(命令行)

JVM监控及诊断工具(命令行)

4.3 -heap:输出整个堆空间的详细信息
JVM监控及诊断工具(命令行)

4.4 -histo:输出堆中对象的统计信息,-histo:live只统计堆中存活的对象
JVM监控及诊断工具(命令行)

JVM监控及诊断工具(命令行)

4.5 -permstat:以ClassLoader以统计口径输出永久代的内存状态信息,仅Linux、Solaris系统有效
4.6 finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象,仅Linux、Solaris系统有效
4.7 -F:当虚拟机进程对-dump选项没有任何响应时,可使用此选项强制执行生成dump文件,仅Linux、Solaris系统有效
4.8 -h|help:帮助命令
4.9 -j:传递参数给jmap启动的jvm

上一篇:JVM快速初探


下一篇:Java 应用线上问题排查思路、常用工具小结