04 性能监控 + 故障处理

Wu Jun 2020-02-24 16:41:05
05 Java > 01 Java 虚拟机

1 JDK 的命令行工具

1.1 jps

虚拟机进程状况工具

jps [options][hostid]
选项 作用
-q 只输出 LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类 main() 函数的参数
-l 输出主类的全名,如果进程运行的 jar 包,则输出 jar 的路径。
-v 输出虚拟机进程启动时 JVM 参数

1.2 jstat

虚拟机统计信息监视工具

jstat [ option vmid [interval[s|ms] [count]]]
选项 作用
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 监视 Java 堆状况,包括 Eden 区、两个 Survivor 区、老年代、永久代等容量、已用空间、GC 时间合集等信息
-gccapacity 监视内容与 -gc 基本相同,但输出主要关注 Java 堆各个区域使用到的最大、最小空间
-gcutil 监视内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与 -gcutil 功能已用,但是会额外输出导致上一次 GC 产生的原因
-gcnew 监视新生代 GC 状况
-gcnewcapacity 监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间
-gcold 监视老年代 GC 状况
-gcoldcapacity 监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity 输出永久代使用到的最大、最小空间
-cmpiler 输出 JIT 编译器编译过的方法、耗时等信息
-printcompilation 输出以及被 JIT 编译的方法

1.3 jinfo

Java 配置信息工具

jinfo [ option ] vmid
选项 作用
-flag 查询给定虚拟机参数的系统默认值
-flags 查询所有虚拟机参数的系统默认值
-flag [ + | - ] 允许或禁止给定虚拟机的参数
-flag name=value 修改给定的虚拟机参数的值
-sysprops 查询系统参数 properties

1.4 jmap

Java 内存映像工具

jmap [ option ] vmid
选项 作用
-heap 显示 Java 堆详细信息
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-dump 生成Java堆转储快照。格式为 -dump:[live,]format=b,file=,live 表示 dump 出存活的对象
-F 当 -dump 没有反应时,可以强制生成 dump 快照
-finalizerinfo 显示在 F-Queue 中等待 Finalizer 线程执行 Finalizer 方法的对象。

1.5 jhat

虚拟机堆转储快照分析工具

1.6 jstack

Java 堆栈跟踪工具

jstack [ option ] vmid
选项 作用
-F 当正常输出的请求不被响应是,强制输出线程堆栈
-l 出堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示 C/C++ 的堆栈

7 HSDIS

JIT 生成代码反编译

2 JDK 的可视化工具

2.1 JConsole

Java 监视与管理控制台

2.2 VisualVM

多合一故障处理工具

3 CPU 异常排查

cpu高的原因?无阻塞操作、循环、正则表达式回溯或纯粹的计算、线程死锁,程序 hang 住

https://juejin.im/entry/5b3f33ccf265da0f8f2019c4

4 OOM 异常排查

https://www.ctolib.com/topics-119701.html

5 频繁 FullGC 的排查

https://juejin.im/post/5b4819fce51d45198c017d58

https://tech.meituan.com/2017/12/29/jvm-optimize.html