JVM调优参数记录

前言

本文记录下笔者学习jvm后了解的参数,以供大家参考

JVM参数

  • -XX:InitialHeapSize=100M 初始化堆大小 简写-Xms100M
  • -XX:MaxHeapSize=100M 最大堆大小 简写-Xms100M
  • -XX:ThreadStackSize=100M 设定每个线程的堆栈大小 简写-Xss100M
  • -XX:+PrintFlagsFinal:打印所有参数,设置了会显示设置后的参数值
  • -XX:+HeapDumpOnOutOfMemoryError 启动堆内存溢出打印当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件
  • -XX:HeapDumpPath=E:\error/heapdump.hprof 指定堆内存溢出打印目录 表示在当前目录生成一个heap.hprof文件
  • -XX:NewSize=20M 设置年轻代的大小
  • -XX:MaxNewSize=50M 年轻代最大大小
  • -XX:OldSize=50M 设置老年代大小
  • -XX:MetaspaceSize=50M 设置方法区大小
  • -XX:MaxMetaspaceSize=50M 方法区最大大小
  • -XX:+UseParallelGC 使用UseParallelGC 新生代,吞吐量优先
  • -XX:+UseParallelOldGC 使用UseParallelOldGC 老年代,吞吐量优先
  • -XX:+UseConcMarkSweepGC 使用CMS 老年代,停顿时间优先
  • -XX:+UseG1GC 使用G1GC 新生代,老年代,停顿时间优先
  • -XX:NewRatio 新老生代的比值,比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5(默认新生代占1/3,没有特殊需求不需要改)
  • -XX:SurvivorRatio 两个S区和Eden区的比值比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一个S占整个新生代的1/10
  • -XX:+PrintGCDateStamps Xloggc:$CATALINA_HOME/logs/gc.log 打印出GC日志 可以使用不同的垃圾收集器,对比查看GC情况

以上就是一些相对常用的指令,JVM调优最常见的就是去调整堆大小,也就是根据应用情况来设置-Xmx和-Xms,建议是-Xmx和-Xms设置相同的值,避免初始化堆大小不断的扩大和缩小导致开销

JVM分析工具

jdk默认提供了一些可以用来分析jvm运行情况的工具,具体有以下指令可以使用

  • jps:查看当前java进程
  • jinfo:查看或者修改jvm参数,如jinfo -flag UseG1GC PID、jinfo -flag MaxHeapSize
    PID, 修改参数必须是-XX:PrintFlagsFinal打印的参数类型是manageable的,不推荐使用。修改参数建议在启动命令加参数
  • jstat:查看当前进程的内部信息, 如jstat -class PID 1000 10:查询class信息,每个一秒输出1次,输出10次 如jstat -gc PID 1000 10:查询gc信息,每个一秒输出1次,输出10次
  • jstack PID:查询当前线程的堆栈信息,可以排查死锁等,会有信息提示检测到死锁
  • jmap生成堆内存的快照:查看当前信息:jmap -heap PID,下载:jmap -dump:format=b,file=heap.hprof PID
  • jconsole:查看jmap下载的快照文件
  • jvisualvm:也是查看jmap下载的快照文件,比jconsole要好用,安装visual gc查看图形

你可能感兴趣的:(java,jvm,调优,jvm分析,gc)