JVM性能调优

2021-05-11  本文已影响0人  策马踏清风

一、性能调优目的

1. 减少`minor gc`的频率,将转移到老年代的对象数量降低到最新
2. 减少`full gc`次数
3. 找到并提升性能瓶颈

二、软件调优大致过程

  1. 查看内存和GC日志
-verbose.gc:显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。
-XX:+PrintGC      #输出GC日志    
-XX:+PrintGCDetails    #输出GC的详细日志    
-XX:+PrintGCTimeStamps   #输出GC时间戳(以基准时间的形式)    
-XX:+PrintHeapAtGC    #在进行GC的前后打印出堆的信息    
-Xloggc:/path/gc.log    #日志文件的输出路径    
-XX:+PrintGCApplicationStoppedTime    #打印由GC产生的停顿时间
  1. 调整新生代和老年代比例
# 新生代和老年代一般内存比例为 1:2
-Xms # 初始堆大小
-Xmx # 最大堆大小
-Xmn # 新生代大小
-XX:NewRatio=n # 新生代和老年代的比例,一般为2,新生代1:老年代2
-XX:PermSize=n # 非堆内存大小,一般为物理内存1/64
-XX:MaxPermSize=n # 非堆内存最大值,默认是物理内存的1/4
# 新生代中 Eden和Survivor区设置(Survivor还分为to Survivor和from Survivor)
-XX:SurvivorRatio=n:新生代中Eden区与两个Survivor区的比值
-XX:PretenureSizeThreshold:直接进入老年代中的对象大小
-XX:MaxTenuringThreshold:进入老年代的年龄

性能分析

  1. 性能达标条件

常用工具列表

  1. 内存监控和故障处理
  1. jdk自带调优工具
  1. 第三方工具

JPS

jps [options] [hostid]
-q  #禁止输出类名,JAR文件名和传递给main方法的参数,只产生一个本地JVM标识符列表。
-m  #显示传递给主方法的参数。 嵌入式JVM的输出可能为空。输出JVM启动时传递给main()的参数。
-l  #显示应用程序主类的完整程序包名称或应用程序JAR文件的完整路径名称。
-v  #显示传递给JVM的参数。
-V  #禁止输出类名,JAR文件名和传递给main方法的参数,只产生一个本地JVM标识符列表(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)。
-Joption  #将选项传递给JVM,其中选项是Java应用程序启动器参考页上描述的选项之一。 例如,-J -Xms48m将启动内存设置为48 MB。

Jstat

Jmap

上一篇 下一篇

猜你喜欢

热点阅读