JVM调优理解

https://apistore.top 开源电商支付系统,欢迎加入转发。

https://cloud.tencent.com/developer/article/1829759

在这里插入图片描述

本地缓存设置时间过长,会造成无法Yang Gc, 当超过一定次数YongGc都无法回收对象时, JVM就会将对象归类到老年代中,当撑满老年代内存后,最终通过FullGc完成回收。由于老年代内存较大,fullGC时间就会比较久(遍历所有可达数据),而且JVM会暂停所有线程,如果大并发来临就会造成超时的问题。所以JVM调优就是让JVM避免或者减少FullGc的次数,降低Gc的时间。

Java堆 = 老年代 + 新生代
新生代 = Eden + S0 + S1
当 Eden 区的空间满了, Java虚拟机会触发一次 Minor GC,以收集新生代的垃圾,存活下来的对象,则会转移到 Survivor区。
大对象(需要大量连续内存空间的Java对象,如那种很长的字符串)直接进入老年态;
如果对象在Eden出生,并经过第一次Minor GC后仍然存活,并且被Survivor容纳的话,年龄设为1,每熬过一次Minor GC,年龄+1,若年龄超过一定限制(CMS默认是6次,最大15次PrintTenuringDistribution可以看出),则被晋升到老年态。即长期存活的对象进入老年态。
老年代满了而无法容纳更多的对象,Minor GC 之后通常就会进行Full GC,Full GC 清理整个内存堆 – 包括年轻代和年老代。
Major GC 发生在老年代的GC,清理老年区,经常会伴随至少一次Minor GC,比Minor GC慢10倍以上。

增加MaxTenuringThreshold,可以降低进入老年代的几率(不是绝对的,如果你的对象一直都不会回收的情况),但是会占用更多的Survivor,而且S0和S1来回复制的对象也更多,所以YongGc的时间会增长。

-server -Xmx12336M -Xms12336M -Xmn4096M -Xss1024k 
-XX:MetaspaceSize=256M 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:+DisableExplicitGC 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:+ScavengeBeforeFullGC 
-XX:+CMSParallelRemarkEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:+ExplicitGCInvokesConcurrent 
-Xloggc:gc.log //记录gc日志
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintHeapAtGC 
-XX:+HeapDumpOnOutOfMemoryError  --当OutOfMemoryError发生时自动生成Heap Dump文件。
-XX:HeapDumpPath=./logs
-XX:+HeapDumpBeforeFullGC  -- 当JVM执行FullGC前执行 dump。
-XX:+HeapDumpAfterFullGC  -- 当JVM执行FullGC后执行 dump。
-XX:-OmitStackTraceInFastThrow   -javaagent:/root/middleware/tracking/lib/sandbox-agent.jar=server.port=8820\;server.ip=0.0.0.0 
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
-jar app.jar
-server 
-Xmx5144M 
-Xms5144M 
-Xmn2048M 
-Xss1024k 
-Xloggc:gc.demo.log //打印gc日志
-XX:+UseParNewGC 
-XX:MetaspaceSize=256M 
-XX:+UseConcMarkSweepGC 
-XX:+DisableExplicitGC 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:+ScavengeBeforeFullGC -XX:+CMSParallelRemarkEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:+ExplicitGCInvokesConcurrent 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintHeapAtGC 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+PrintTenuringDistribution  //输出显示在survivor空间里面有效的对象的岁数情况
-XX:MaxTenuringThreshold=15   //15次yong gc后放入老年代,6次默认值
-XX:-OmitStackTraceInFastThrow 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值