一、监控工具
包括jdk的命令行工具和可视化工具。
1、命令行工具
2、可视化工具
- JConsole
- VisualVM
JSonsole:在JDK/bin目录下
VisualVM需要下载安装
二、Trace跟踪参数
1、打印GC详细信息
-XX:+PrintGCDetails
2、GC前和GC后,打印堆信息
-XX:+PrintHeapAtGC
3、打印CG发生的时间戳
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
4、配置GC日志文件
-Xloggc:log/gc.log 输出日志到项目log文件夹中
三、堆的分配参数
1、-Xmx –Xms:指定最大堆和最小堆(初始化堆)
例如:-Xmx20m -Xms5m
堆最大空间为20m,初始化为5m
JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。
2、-Xmn、-XX:NewRatio、-XX:SurvivorRatio 新生代老年代配置
- -Xmn
设置新生代大小
- -XX:NewRatio
新生代(eden+2*s)和老年代(不包含永久区)的比值
例如:-XX:NewRatio=4,表示新生代:老年代=1:4,即新生代占整个堆的1/5
- -XX:SurvivorRatio(幸存代)
设置两个Survivor区和eden的比值
例如:-XX:SurvivorRatio=8,表示两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10
3、-XX:PermSize -XX:MaxPermSize 非堆内存(方法区或永久代)配置初始空间和最大空间
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
4、-XX:PretrnureSizeThreshold 进入老年代的年龄值
默认为15
四、异常处理
1、OutOfMemory
-Xmx 不指定或者指定偏小
2、OutOfMemoryError: PermGen space
XX:MaxPermSize设置过小
五、性能优化
性能优化需要根据GC的日志动态调整堆的配置参数,做到尽量减少Full GC和Minor GC(Full GC由于效率低优先级更高)。