JDK监控和故障处理工具总结
JDK命令行工具
jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;
**jstat**( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据;
jinfo (Configuration Info for Java) : Configuration Info forJava,显示虚拟机配置信息;
jmap (Memory Map for Java) :生成堆转储快照;
jhat (JVM Heap Dump Browser ) : 用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果;
jstack (Stack Trace for Java):生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。
jps
jps:显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID,常用的命令有 jps -1:输出主类的全名,如果执行的是Jar包,就输出路径
jps -v:输出虚拟机进程启动时JVM参数
jps -m:输出传递给Java进程main()函数的参数
jstat
见识虚拟机各种运行状态信息,包括本地或远程的类信息,内存,垃圾手机,JIT编译等数据
格式:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
比如:jstat -gc -h3 31736 1000 10 分析进程id31736的gc情况每1000ms打印一次,打印10次停止,每3行打印指标头部
常见的opotion jstat -class vmid :显示 ClassLoader 的相关信息;
jstat -compiler vmid :显示 JIT 编译的相关信息;
jstat -gc vmid :显示与 GC 相关的堆信息;
jstat -gccapacity vmid :显示各个代的容量及使用情况;
jstat -gcnew vmid :显示新生代信息;
jstat -gcnewcapcacity vmid :显示新生代大小与使用情况;
jstat -gcold vmid :显示老年代和永久代的行为统计,从jdk1.8开始,该选项仅表示老年代,因为永久代被移除了;
jstat -gcoldcapacity vmid :显示老年代的大小;
jstat -gcpermcapacity vmid :显示永久代大小,从jdk1.8开始,该选项不存在了,因为永久代被移除了;
jstat -gcutil vmid :显示垃圾收集信息;
jinfo
使用jinfo可以再不重启的情况下,更改jvm的参数,
jinfo -flag [+|-]name vmid,举例:jinfo -flag PrintGC 17340
jmap
jmap命令用于生成堆转存储快照,如果不使用jmap可以通过“-XX:+HeapDumpOnOutOfMemoryError” 参数,让虚拟机在内存溢出异常出现后生成dump文件,Linus可以通过 kill-3 发送进程退出信号拿到dump文件。
jmap 还可以查询finalizer执行队列、java堆和永生代的详细信息,如空间使用率,当前使用的收集器。
jhat
用于分析headdump文件,生成html服务器,在浏览的分析
jstack
线程快照,就是当前虚拟机每一条线程正在执行方法堆栈的集合。主要目的是定位线程长时间出现停顿的原因,线程间死锁,死循环,请求外部资源长时间等待。
JConsole–JDK可视化分析工具
内存监视:包括堆内存,非堆内存,还可以细化
线程监控:jstack,检查死锁
Visual VM
综合多方面,不仅监控,故障处理,性能分析,直接应用在生产环境中。
显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
监视应用程序的 CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。
dump 以及分析堆转储快照(jmap、jhat)。
方法级的程序运行性能分析,找到被调用最多、运行时间最长的方法。
离线程序快照:收集程序的运行时配置、线程 dump、内存 dump 等信息建立一个快照,可以将快照发送开发者处进行 Bug 反馈。
其他 plugins 的无限的可能性......