ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gc提炼

2021-05-16 18:02:53  阅读:218  来源: 互联网

标签:JAVA 提炼 XX GC 内存 ms gc


 


doctor
104
-Xms4096M -Xmx4096M -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=50
Eden区达到2454M触发yongGC

jkx
167 16G
-Xms10240M -Xmx10240M -XX:+UseG1GC -XX:G1HeapRegionSize=8m -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=50 -XX:+PrintGCDetails -XX:+PrintGCDateStamps
Eden区达到6136M触发yongGC 新生代占用总堆内存的60%,Eden满了触发GC
157
-Xms12288M -Xmx12288M -Xmn4096m -XX:+UseG1GC -XX:G1HeapRegionSize=8m -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps
Eden区达到4088M触发yongGC
G1不再像上文所述的垃圾收集器,需要分代配合不同的垃圾收集器

算法:
jdk8 默认回收器 -XX:+UseParallelGC 并行收集器使用copying算法
-XX:+UseParNewGC 设置年轻代为并发收集,新生代多线程并行收集器使用copying算法
CMS是老年代的一种收集器使用标记-清除算法-适用长生命周期对象多的应用

参数设置:
-XX:+DisableExplicitGC 手动调用System.gc()就不会生效
-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 设置元空间初始大小以及最大可分配大小
Xmx最大堆大小 Xms最小堆大小
CMSInitiatingOccupancyFraction 触发CMS收集器的内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集


A、G1垃圾回收器的开始mixedGc的阈值InitiatingHeapOccupancyPercent默认是45%,这指的是已经使用内存(老年代+新生代)占整个堆的占比。
B、G1MaxNewSizePercent的默认值是60%
C、G1垃圾回收期与之前的垃圾回收器的回收模型(和内存区域划分)如此不同,所以执行机制也很不同,执行一次ygc后,会计算是否达到InitiatingHeapOccupancyPercent,如果达到,则触发mixedGc。在ygc后再判断的机制,导致实际的计算是:老年代使用/整个堆。
而老年代最多达到100%-60%=40%,所以永远无法触发mixedGc老年代GC,会在老年代达到97%使用率或者没有连续分配空间时直接触发fullgc。
开启了g1垃圾回收器,如果使用默认G1配置,则mixedGc永远不会发生。


-XX:+UseConcMarkSweepGC 设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了。所以,此时年轻代大小最好用-Xmn设置。
-XX:+CMSParallelRemarkEnabled 开启并行收集 并行运行最终标记阶段,加快最终标记的速度
-XX:+CMSClassUnloadingEnabled 让CMS可以收集永久带,默认不会收集
-XX:SurvivorRatio 来控制Eden和Survivor的比例
-XX:SoftRefLRUPolicyMSPerMB 代表每一MB空闲内存空间可以允许SoftReference对象存活多久,不要设置
cms收集器 https://blog.csdn.net/mc90716/article/details/80158138
-XX:G1HeapRegionSize 大小影响分配和回收的效率,HR过大则回收消费的时间长,HR过小则导致对象内存分配较慢且内存利用率较低,大小主要是关系到Humongous Object的判定,当一个对象超过Region大小的一半时,则为巨型对象,那么其会至少独占一个Region 默认为2048 2的幂次
-XX:G1ReservePercent 指定G1为分配担保预留的空间比例,默认10%。也就是老年代会预留10%的空间来给新生代的对象晋升,如果经常发生新生代晋升失败而导致Full GC,那么可以适当调高此阈值。但是调高此值同时也意味着降低了老年代的实际可用空间
G1收集器 https://zhuanlan.zhihu.com/p/181305087
优点:分区可以有效利用内存空间

 

G1的gc日志 总共4096M
2021-05-16T14:09:32.451+0800: 333419.229: [GC pause (G1 Evacuation Pause) (young), 0.0312402 secs]
[Parallel Time: 18.0 ms, GC Workers: 4]
[GC Worker Start (ms): Min: 333419233.2, Avg: 333419233.3, Max: 333419233.4, Diff: 0.2]
[Ext Root Scanning (ms): Min: 10.2, Avg: 13.6, Max: 17.0, Diff: 6.8, Sum: 54.3]
[Update RS (ms): Min: 0.0, Avg: 1.9, Max: 3.9, Diff: 3.9, Sum: 7.7]
[Processed Buffers: Min: 0, Avg: 35.0, Max: 99, Diff: 99, Sum: 140]
[Scan RS (ms): Min: 0.1, Avg: 0.8, Max: 1.5, Diff: 1.4, Sum: 3.1]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1]
[Object Copy (ms): Min: 0.5, Avg: 1.1, Max: 1.7, Diff: 1.2, Sum: 4.5]
[Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.3, Diff: 0.3, Sum: 0.9]
[Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4]
[GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.2]
[GC Worker Total (ms): Min: 17.6, Avg: 17.7, Max: 17.8, Diff: 0.2, Sum: 70.7]
[GC Worker End (ms): Min: 333419251.0, Avg: 333419251.0, Max: 333419251.0, Diff: 0.0]
[Code Root Fixup: 0.0 ms]
[Code Root Purge: 0.0 ms]
[Clear CT: 2.1 ms]
[Other: 11.1 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.5 ms]
[Ref Enq: 0.0 ms]
[Redirty Cards: 0.2 ms]
[Humongous Register: 3.5 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 5.4 ms]
[Eden: 2454.0M(2454.0M)->0.0B(2454.0M) Survivors: 2048.0K->2048.0K Heap: 2530.2M(4096.0M)->76.2M(4096.0M)]
[Times: user=0.06 sys=0.00, real=0.04 secs]
解读:
[Eden: 2454.0M(2454.0M)->0.0B(2454.0M) Survivors: 2048.0K->2048.0K Heap: 2530.2M(4096.0M)->76.2M(4096.0M)] GC结果:Eden区减少2454.0M总共2454.0M
Eden区的GC之后,幸存的对象将被移动到 Survivor区

jkx120 8G
-Xms4096M -Xmx4096M -Xmn256M -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps
gc日志
2021-05-16T14:55:53.102+0800: 2153867.976: [GC (Allocation Failure) 2021-05-16T14:55:53.102+0800: 2153867.976: [ParNew: 210249K->403K(235968K), 0.0250728 secs] 330320K->120475K(4168128K), 0.0252330 secs] [Times: user=0.10 sys=0.00, real=0.03 secs]
2021-05-16T15:02:22.053+0800: 2154256.928: [GC (Allocation Failure) 2021-05-16T15:02:22.053+0800: 2154256.928: [ParNew: 210195K->382K(235968K), 0.0260395 secs] 330267K->120459K(4168128K), 0.0262224 secs] [Times: user=0.10 sys=0.00, real=0.03 secs]


元空间的本质和永久代类似,都是对JVM规范中方法区的实现。
不过元空间和永久代之间最大的区别在于:
元空间并不在虚拟机中,而是使用本地内存。
因此,默认情况下,元空间的大小仅受本地内存限制

如果jvm参数中设置了-XX:+DisableExplicitGC,那么代码中手动调用System.gc()就不会生效。而有些框架中因为是使用的堆外内存,必须手动调用System.gc()来释放。如果禁用掉就会导致堆外内存使用一直增长,造成内存泄露

内存溢出:(out of memory)通俗理解就是内存不够
内存泄漏:(Memory Leak) ,内存使用一直增长,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果


保险服务jvm

-Xms4096M -Xmx4096M -Xmn256M -XX:+UseG1GC -XX:G1HeapRegionSize=8m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:/wls/apache/servers/spri_pah-app-core-sportreward-sportawardsmall-prdDMZ135054/logs/gc.log

215.161.142.167
-Xms12288M -Xmx12288M -XX:+UseG1GC -XX:G1HeapRegionSize=8m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:/wls/apache/servers/spri_pah-app-core-insurance-service-dmz-prdIns267155/logs/gc.log

215.161.144.125
-Xms4096M -Xmx4096M -Xmn256M -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:/wls/apache/servers/spri_pah-app-core-insurance-service-dmz-big-prdIns680749/logs/gc.log


hoose_gc_options()
{
# Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...
# '1' means releases befor Java 9
JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -lt "9" ]] ; then
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
else
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"
fi
}

 

标签:JAVA,提炼,XX,GC,内存,ms,gc
来源: https://www.cnblogs.com/xingminghui111/p/14774362.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有