ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-22 23:04:31  阅读:144  来源: 互联网

标签:输出 Java 命令行 虚拟机 JVM 参数 监控 GC


目录

环境

jdk11

jps

  1. jps(Java Process Satus):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。
  2. 基本语法:jps [options] [hostid]
  3. options
    3.1 -q: 只显示本地虚拟机唯一id

    3.2 -l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径

    3.3 -m:输出虚拟机进程启动时传递给主类main()的参数

    3.4 -v:输出虚拟机进程启动时的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的相关信息

5.2 -gc: 显示与GC相关的信息

5.3 -gccapacity:显示内容基本与-gc相同,输出主要关注Java堆各个区域使用到的最大、最小空间

5.4 -gcutil:显示内容基本与-gc相同输出主要关注已使用空间占总空间的百分比

5.5 -gccause:与-gcutil功能一样,会额外输出导致最后一次或当前正在发生的GC产生的原因

5.6 -gcnew:显示新生代GC状况

5.7 -gcnewcapacity:显示内容基本与-gcnew相同,输出主要关注使用到的最大、最小空间

5.8 -gcold:显示老年代GC状况

5.9 -gcoldcapacity:显示内容基本与-gcold相同,输出主要关注使用到的最大、最小空间

5.10 -compiler:显示JIT编译器编译过的方法、耗时等信息

5.11 -printcompilation:输出已经被JIT编译过的方法

6. interval:以指定单位、秒(s) 或毫秒(ms) 表示的采样间隔。默认单位是毫秒。必须是正整数。指定后,该jstat命令会在每个时间间隔生成其输出

7. count:用于指定查询的总次数

8. -t参数:可以在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒
我们可以比较Java进程的启动时间以及总GC时间(GCT 列),或者两次测量的间隔时间以及总 GC时间的增量,来得出GC时间占运行时间的比例。如果该比例超过20%,则说明目前堆的压力较大;如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。|

9. -h参数:可以在周期性数据输出时,输出多少行数据后,输出一个表头信息

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 默认输出全部的参数和系统属性

    4.2 -flag name:输出对应名称的参数

    4.3 -flag[+-]name:启用或禁用指定的布尔命令行标志,只有被标记为manageable的参数才可以被动态修改


4.4 -flag name = value:设置name的值

4.5 -flags:输出全部参数

4.6 -sysprops:输出系统属性

4.7:java -XX:+PrintFlagsInitial:查看所有JVM参数启动的初始值

4.8 java -XX:+PrintFlagsFinal:查看所有JVM参数的最终值

4.9 java -XX:+PrintCommandLineFlags:查看被用户或JVM设置过的参数的信息

jmap

  1. jmap(JVM Memory Map):获取dump文件、目标Java进程的内存相关信息(包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等)
  2. 官方文档:https://docs.oracle.com/en/java/javase/11/tools/jmap.html
  3. 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();
      }
    }
  }


4.2 -dump:live:只保存堆中的存活对象

4.3 -heap:输出整个堆空间的详细信息

4.4 -histo:输出堆中对象的统计信息,-histo:live只统计堆中存活的对象

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

标签:输出,Java,命令行,虚拟机,JVM,参数,监控,GC
来源: https://www.cnblogs.com/ftlzypx/p/15721528.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有