输入“/”快速插入内容

JDK监控和故障处理工具总结

1.
JDK命令行工具
在JDK安装目录的bin目录下
jps(JVM Process Status):类似于UNIX的ps命令,用于查看所有Java进程的启动类、传入参数和Java虚拟机参数等信息
jstate(JVM Statistics Monitoring Tool):用于收集HotSpot虚拟机各方面的运行数据
jinfo(Configuration Info for Java):虚拟机配置信息
jmap(Memory Map for Java):生成堆转储快照
jhat(JVM Heap Dump Browser):用于分析heapdump文件,建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstack(Stack Trace for Java):生成虚拟机当前时刻的线程快照,线程快照时当前虚拟机内每一条线程正在执行的方法堆栈的集合
1.1
jps:查看所有Java进程
jps显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID
命令
解释
Jps -q
只输出进程的本地虚拟机唯一ID
Jps -l
输出主类的全名,若进程执行的是Jar包,则输出Jar路径
Jps -v
输出虚拟机进程启动时JVM参数
Jps -m
输出传递给Java进程main()函数的参数
1.2
jstat:监控虚拟机各种运行状态信息
用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类信息、内存、垃圾收集、JIT编译等运行数据,在没有GUI只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具
jstat命令使用格式
代码块
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
如:jstat -gc -h3 31736 1000 10表示分析进程 id 为 31736 的 gc 情况,每隔 1000ms 打印一次记录,打印 10 次停止,每 3 行后打印指标头部
命令
解释
Jstat -class vmid
显示ClassLoader的相关信息
Jstat -compiler vmid
显示JIT编译的相关信息
Jstat -gc vmid
显示与GC相关的堆信息
Jstat -gccapacity vmid
显示各个代的容量及使用情况
Jstat -gcnew vmid
显示新生代信息
Jstat -gcnewcapacity vmid
显示新生代大小与使用情况
Jstat -gcold vmid
显示老年代和永久代的行为统计,从jdk1.8开始,该选项仅表示老年代,因为永久代被移除了
Jstat -gcoldcapacity vmid
显示老年代的大小
Jstat -gcutil vmid
显示垃圾收集信息
1.3
jinfo:实时地查看和调整虚拟机各项参数
Jinfo vmid:输出当前jvm进程的全部参数和系统属性
第一部分是系统属性
第二部分是JVM的参数
Jinfo -flag name vmid:输出对应名称的参数的具体值。输出MaxHeapSize、查看当前jvm进程是否开启打印GC日志(-XX:PrintGCDetails :详细 GC 日志模式,这两个都是默认关闭的)
使用jinfo可以在不重启虚拟机的情况下,动态修改jvm的参数,尤其是在线上的环境特别有效
代码块
info -flag [+|-]name vmid 开启或者关闭对应名称的参数
1.4
jmap:生成堆转储快照
用于生成堆转储快照,若不使用jmap命令,想获取Java堆转储,可使用
“-XX:+HeapDumpOnOutOfMemoryError” 参数,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件,Linux 命令下可以通过 kill -3 发送进程退出信号也能拿到 dump 文件