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官方提供最强大的工具;
标签:分析,1234,jmap,虚拟机,参数,JVM,进程,线程,常用工具 From: https://www.cnblogs.com/xy20211005/p/17542292.html