JVM常用工具分析

JVM基础分析、故障解决工具

常用jdk工具

  • jps : Jvm Process Status Tool 显示系统内全部的虚拟机进程;
  • jstat : Jvm Statistics Monitoring Tool 动态收集指定进程运行时数据;
  • jinfo : Configuration Info ForJava 实时显示或调整虚拟机的配置信息;
  • jmap : Memory Map For Java 生成虚拟机的内存转储快照(heapdump文件:二进制文件,需要用jhat命令工具去解析);
  • jhat : Jvm Heap Dump Browser 用于分析heapdump文件;
  • jstack : Stack Trace For Java 显示虚拟机某时刻的线程快照;

jps

命令格式: jps [options] [hostid];主要应用就是获取进程号,一般都是直接 jsp命令(等同于jps -V)回车即可;

第一个参数options

  • -q : 显示进程id;
  • -m : 显示进程id,主类名称,以及传入main方法的参数;
  • -l : 显示进程id, 主类全名;
  • -v : 显示进程id, 主类名称,及传入jvm的参数;
  • -V : 显示进程id,主类名称

上面的参数可以组合使用,比如 jps -q -l -v ;

第二个参数hostid

不常用,指定ip的,一般我们都是默认本机ip,如果需要看其他服务器的jvm信息,需要远程服务器开启jstatd;

参考: https://www.cnblogs.com/EasonJim/p/7483739.html

jstat

命令格式: jstat [options vmid [interval [count]]]

第一个参数options

  • -class : 类加载器统计的信息 jstat -class 1234

    • loaded : 已经加载的类数
    • Bytes : 已加载的类的总大小
    • UnLoaded : 已经卸载的类数(被虚拟机识别无用的)
    • Bytes : 已卸载类的总大小
  • -compiler : jvm即使编译器统计信息 jstat -compiler 1234

    • Compiled : 执行编译的任务数
    • Failed : 编译任务数失败数量
    • Invalid : 无效编译任务数
    • Time: 编译总时长
    • FailedType : 上次失败的编译的编译类型
    • FailedMethod : 上次失败的编译的类名和方法
  • -gc/gcutil : 显示gc的信息 jstat -gc/gcutil 1234

第二个参数vmid

一般没用,远程调试别人jvm用的

第三个参数interval

查看信息的时间间隔

jstat -gc 1234 250 : 查看进程id为1234的进程的gc情况,每250毫秒输出一次;

第四个参数count

产看信息的次数

jstat -gc 1234 250 3 : 查看进程id为1234的进程的gc情况,每250毫秒输出一次,共3次;

jinfo

命令格式: jinfo [options]

jinfo 1234 直接输出全部参数和系统属性

  • -flags : 输出全部虚拟机参数 jinfo -flags 1234;
  • -flag name : 输出虚拟机参数name的信息 ;

jinfo -flag HeapDumpPath 1234 输出当前指定打印堆栈快照,为空表示,输出当前命令所在的目录;

jinfo -flag HeapDumpPath=d:\test 1234 动态设置jvm参数值,指定当前堆栈快照输出地址为d盘的test文件夹下;

  • -sysprops : 输出系统全部参数 jinfo -sysprops 1234;

jmap

主要用于生成dump文件,查看堆栈、线程等详细信息等;

命令格式 jmap [options]

  • 无参数 : 产看进程的整体内存映像信息,打印出进程中每个共享对象起始地址、内存大小及共享对象文件路径; jmap 1234;
  • jmap -heap 1234 : 查看指定进程的堆使用情况;
    • Heap Configuration : 堆的内存配置情况;
    • Heap Usage : 内存的使用情况;
    • Eden、From、To、PS Old Space : Eden区、两个Survivor区、老年代区使用情况;
  • jmap -histo:live 1234 : 查看指定进程的存活的具体类信息;
  • jmap histo 1234 : 查看指定进程的全部的类信息;
  • jmap -clstats 1234 : 查看类加载器信息;
    • class_loader : 加载器
    • classes : 加载类数量
    • bytes :总大小
    • parent_loader : 父加载器
    • alive? : 是否存活
    • type : 加载器类型;
  • jmap -finalizerinfo 123 : 查询当前有没有等待被GC的对象(等待被Finalizer线程执行finalizer方法的对象);
  • jmap -dump:live,format=b,file=e:\test\jmap.bin 123 生成dump文件
    • :live : 表示只要当前存货的文件
    • format=b : 表示生成的是byte,二进制文件
    • file : 指定文件路径,可以不写文件路劲,但一定要写文件名(生成到默认路径),文件名无所谓.bin,.txt等都行,反正都看不懂;

jhat

说明:jhat命令在JDK9、JDK10中已经被删除,官方建议用VisualVM代替。

用来分析jmap生成的dump快照文件,jhat内置了一个微型的HTTP/HTML服务器,生成的分析结果可以在浏览器上查看;不过有专门的工具用来分析这个文件,没必要使用jvm带的这个东西;

命令格式: jhat [options] 堆转储文件

  • jhat d:\aaa.bin : 无命令行;
  • jhat -port 70001 xxx.bin : 指定端口7001;

jstack

查看导出线程堆栈信息,大多数用于获取每条线程的堆栈集合,定位线程出现长时间等待、死锁等情况;

命令格式 jstack [options]

  • jstack -F 1234 : 当线程挂起时,使用jstack -l 1234 请求不被响应时,可以强制输出线程堆栈
  • jstack -l 1234 : 除堆栈外,显示关于锁的信息
  • jstack -m 1234 : 可以同时输出Java以及C/C++的堆栈信息;

jdk可视化工具

JConsole

直接敲 jconsole 回车即可,看些虚拟机环境,运行配置比较方便;

Visual VM

直接敲 jvisualvm 回车即可,jdk官方提供最强大的工具;

posted @ 2023-07-10 20:39  窃窃私语QAQ  阅读(55)  评论(0编辑  收藏  举报