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