JVM参数调优

目录

一、不同开头的参数

1、- 开头为标准参数

2、-D 设置系统属性,

3、以 -X 开头为非标准参数

4、以 –XX:开头为非稳定参数

二、常用参数分类

1、内存

-Xms 初始堆大小

-Xmx 最大堆内存

-Xmn 设置年轻代初始大小和最大大小。

-XX:NewSize=n设置年轻代最小空间大小。

-XX:MaxNewSize=n设置年轻代最大空间大小。

-Xss 线程的栈的大小。

-XX:NewRatio=n 设置年轻代和年老代的比值

-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值。

-XX:MetaspaceSize=n 元空间大小。

-XX:MaxMetaspaceSize=n 最大元空间大小。

2、GC信息

-XX:+PrintGC 打印GC日志

-XX:+PrintGCDetails 打印GC详细日志

-XX:+PrintGCTimeStamps

GC 内容输出到文件中

3、OOM信息

OOM的时候自动dump内存快照出来

4、Full GC信息

三、案例

1、案例

2、常用配置


一、不同开头的参数

1、- 开头为标准参数
所有的 JVM 都要实现这些参数,并且向后兼容,如 -server。
2、-D 设置系统属性,
如 -Dfile.encoding=UTF-8。
3、以 -X 开头为非标准参数
基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。 可以使用 java -X 命令来查看当前 JVM 支持的非标准参数,如 -Xmx8g。
4、以 –XX:开头为非稳定参数
专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消。 -XX:±Flags 形式, ± 是对布尔值进行开关,如 -XX:+UseG1GC。 -XX:key=value 形式, 指定某个选项的值,如 -XX:MaxPermSize=256m。

二、常用参数分类

1、内存
-Xms<size> 初始堆大小
-Xms1024M 初始化堆内存,正常和最大堆内存相同,减少动态改变的内存损耗
-Xmx<size> 最大堆内存
-Xmx1024M 最大堆内存
一般将Xms和Xmx设为一样的值,若-Xms比较小,又需要初始化很多对象,jvm就必须反复增加内存。一样大也可避免每次垃圾回收完成后JVM重新分配内存。
-Xmn<size> 设置年轻代初始大小和最大大小。
-Xmn384M
增大年轻代后,会减小年老代大小,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
等效于: 使用 -XX:NewSize 设置初始化大小并使用-XX:MaxNewSize 设置最大大小。
-XX:NewSize=n设置年轻代最小空间大小。
-XX:NewSize=384M
-XX:MaxNewSize=n设置年轻代最大空间大小。
-XX:MaxNewSize=384M
-Xss<size> 线程的栈的大小。
-Xss256k
-Xss 默认是 512k~1024k 等价于 -XX:ThreadStackSize=512k
-XX:NewRatio=n 设置年轻代和年老代的比值
-XX:NewRatio=3  表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值。
-XX:SurvivorRatio=8 年轻代比例 8:1:1
-XX:MetaspaceSize=n 元空间大小。
-XX:MetaspaceSize=256M 
-XX:MaxMetaspaceSize=n 最大元空间大小。
-XX:MaxMetaspaceSize=256M 
2、GC信息
-XX:+PrintGC 打印GC日志
-XX:+PrintGC
-XX:+PrintGCDetails 打印GC详细日志
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCTimeStamps  GC时,打印进程启动到现在经历的时间。
GC 内容输出到文件中
-XX:+PrintGCDetails
-Xloggc:/tmp/logs/gc_%p.log   将以上 GC 内容输出到文件中
3、OOM信息
OOM的时候自动dump内存快照出来
-XX:+HeapDumpOnOutOfMemoryError
开启堆转储功能。当Java应用抛出OutOfMemoryError异常时会用堆转储工具(HPROF)将Java堆存储到文件中。
可使用选项-XX:HeapDumpPath=path指定文件路径。
# OOM的时候自动dump内存快照出来
-XX:+HeapDumpOnOutOfMemoryError
# 设置Dump保存的路径
-XX:HeapDumpPath=/usr/local/app/oom
# 错误日志存放路径
-XX:ErrorFile=/tmp/logs/hs_error_pid%p.log  
4、Full GC信息
# 在Full GC前生成dump文件
-XX:+HeapDumpBeforeFullGC

# 在Full GC后生成dump文件
-XX:+HeapDumpAfterFullGC

# 设置Dump保存的路径
-XX:HeapDumpPath=/tmp/FullGC

三、案例

1、案例
-Xmx1024M 最大堆内存
-Xms1024M 初始化堆内存,正常和最大堆内存相同,减少动态改变的内存损耗
-Xmn384M 年轻代内存
-XX:PermSize=128M 初始化持久代内存
-XX:MaxPermSize=256M 最大持久代内存
-XX:SurvivorRatio=8 年轻代比例 8:1:1

-XX:+PrintGCDetails 打印gc信息,可参考gc的比例进行调优
-XX:MaxDirectMemorySize=128M 比如netty的零copy会使用到直接内存,一般System.gc()会回收,但是如果DisableExplicitGC开启,会将System.gc()转为空,不会回收这部分内存,如果启用了cms,会对直接堆外内存回收
-XX:+DisableExplicitGC System.gc()不可用
-XX:+UseConcMarkSweepGC 老年代使用cms,标记-清除算法会产生碎片
-XX:+UseParNewGC 年轻代使用并行收集器

-XX:+UseCMSCompactAtFullCollection 和下面的配合使用,开启碎片整理
-XX:CMSFullGCsBeforeCompaction=10 10次fullgc后开始内存空间压缩
-XX:+CMSParallelRemarkEnabled cms收集过程初始标记、并发标记、预清理、可中断预清理、最终标记、并发清除、并发重置,在最终标记中遍历区域较多,开启并行收集。

-XX:+UseCMSInitiatingOccupancyOnly 开启,使用下面的值
-XX:CMSInitiatingOccupancyFraction=70 对内存占用70%执行cms

-XX:+CMSClassUnloadingEnabled 清理持久代

-XX:+HeapDumpOnOutOfMemoryError oom会将堆信息dump
-XX:HeapDumpPath=/opt/log/tomcat/10-sdk/dump/heap.hprof dump文件地址

-XX:+PrintGCDateStamps 打印gc时间

-XX:TargetSurvivorRatio=90 s区达到90%自动计算转到老年代的age
-XX:MaxTenuringThreshold=15 年轻代到老年代的最大age

-XX:-ReduceInitialCardMarks 解决gc bug

-Dcom.sun.management.jmxremote.authenticate=true 开启用户认证
-Dcom.sun.management.jmxremote.ssl=false 禁止ssl连接
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.access.file=../shared/conf/jmxremote.access 用户名
-Dcom.sun.management.jmxremote.password.file=../shared/conf/jmxremote.password 密码

-Djava.rmi.server.hostname=xxx

-Dcatalina.base=/opt/oracle/tomcat/t-10 设置tomcat目录
2、常用配置
-Xms4096M
-Xmx4096M 
-Xmn3072M 
-Xss1M 
-XX:MetaspaceSize=256M 
-XX:MaxMetaspaceSize=256M 

-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFaction=92 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=0 
-XX:+CMSParallelInitialMarkEnabled 
-XX:+CMSScavengeBeforeRemark 
-XX:+DisableExplicitGC 

-XX:+PrintGCDetails 
-Xloggc:gc.log 

-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/usr/local/app/oom

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM参数调优是为了提高Java应用程序的性能和稳定性。下面是一些常见的JVM参数调优的思路和建议: 1. 堆内存设置: - -Xms: 初始堆大小,建议与-Xmx相同,避免堆大小的动态调整。 - -Xmx: 最大堆大小,根据应用程序的需求进行设置,避免频繁的垃圾回收。 2. 垃圾回收器选择: - -XX:+UseParallelGC: 使用并行垃圾回收器,适合多核CPU和高吞吐量应用。 - -XX:+UseConcMarkSweepGC: 使用CMS垃圾回收器,适合响应时间优先的应用。 - -XX:+UseG1GC: 使用G1垃圾回收器,适合大内存应用和低延迟要求。 3. 垃圾回收参数调优: - -XX:NewRatio: 设置新生代和老年代的比例,默认为2,可以根据应用程序的对象生命周期进行调整。 - -XX:SurvivorRatio: 设置Eden区和Survivor区的比例,默认为8,可以根据对象的存活率进行调整。 - -XX:MaxTenuringThreshold: 设置对象进入老年代的年龄阈值,默认为15,可以根据对象的存活率和内存情况进行调整。 4. 线程相关参数: - -Xss: 设置线程栈的大小,默认为1M,可以根据应用程序的线程数量进行调整。 - -XX:ParallelGCThreads: 并行垃圾回收的线程数量,默认为CPU核心数的1/8,可以根据CPU和内存情况进行调整。 5. 其他常用参数: - -XX:+UseCompressedOops: 使用压缩指针,可以减少对象引用的内存消耗。 - -XX:+DisableExplicitGC: 禁用显示调用System.gc()方法,避免不必要的垃圾回收。 以上是一些常见的JVM参数调优策略,具体的调优效果和最佳参数设置还需要根据应用程序的实际情况进行测试和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值