jvm性能监控和故障处理工具

前言

jdk团队研发了很多用于jvm性能监控的工具,下面我们来看看这些工具的用途和使用

这些工具都位于jdk/lib/tools.jar类库里,可通过调用该类库的接口实现生产环境的监控。 请输入图片地址 请输入图片地址

jps:jvm进程状况工具

jps指令常见选项 请输入图片地址

jstat:虚拟机统计信息监视工具

jstat指令常见选项 请输入图片地址

jstat -gcutil 26797 2000 100  // 每2秒查询26797进程GC情况 共100次 

请输入图片地址

各项意义 S0:存活区1 S1:存活区2 E:年轻代 O:老年代 M:元空间 (对应以前的P 永久代,方法区) YGC:minorGC次数 YGCT:minorGC总耗时 FGC:fullGC次数 FGCT:fullGC总耗时 GCT:GC总耗时

jinfo:java配置信息工具

jmap:java内存映像工具

jhat:jvm堆转储快照分析工具

jstack:java堆栈跟踪工具

除了上述命令行工具,jdk还提供了两个强大的外部可视化工具JConsole,VisualVM

JConsole:java监视和管理控制台

请输入图片地址

VisualVM:多合一故障处理工具 VisualVM提供很多插件的扩展,可以做到显示进程和进程配置,监视应用CPU,GC,堆,方法区,提供dump以及堆转储文件分析;方法级程序性能分析,找出调用最多,运行时间最长方法;收集程序运行时配置,线程dump,内存dump

禁止System.gc()

-XX:+DisableExplicitGC

JVM常见配置参数

栈设置 每个线程的栈大小

-Xss128k

堆设置 初始堆大小

-Xms

最大堆大小

-Xmx

设置年轻代大小

-Xmn
-XX:NewSize=1024 
-XX:MaxNewSize 

设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

-XX:NewRatio=n

年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

-XX:SurvivorRatio=n

设置持久代大小

-XX:PermSize
-XX:MaxPermSize

一个对象最大在Survivor区存活age

-XX:MaxTenuringThreshold=

收集器设置 设置串行收集器

-XX:+UseSerialGC

设置并行收集器

-XX:+UseParallelGC

设置并行年老代收集器

-XX:+UseParallelGC

设置并发收集器

-XX:+UseParallelGC

CMS收集,设置年老代为并发收集

-XX:+UseConcMarkSweepGC

垃圾回收统计信息

-XX:+PrintGC 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 

内存溢出时生成堆dump文件

-XX:+HeapDumpOnOutOfMemoryError
```java

jit编译的代码都是放在codecache
```java
-XX:+UseCodeCacheFlushing 最早被编译的一半方法将会被放到一个old列表中等待回收
在一定时间间隔内,如果方法没有被调用,这个方法就会被从codeCache充清除
 -XX:ReservedCodeCacheSize  设置codecache大小