Loading

关于自己对tomcat8 JVM和GC的设置资料

JVM调优原因:

    tomcat假死,遭受了几天折磨,后面发现是内存泄漏的问题,于是各种谷歌,百度总结一些配置优化

GC日志分析:
    https://gceasy.io/    一款在线GC日志分析工具很好用,推荐给大家

jvm参数说明: 

-server:一定要作为第一个参数,在多个CPU时性能佳 

-Xms:java Heap初始大小默认为物理内存的1/64。

-Xmx:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。

-XX:MetaspaceSize: 元空间(7永久代),持久代;存的是多次垃圾回收 然后会收不到的数据(可以微大点)

-XX :MaxMetaspaceSize

-xmn: 年轻代(年轻代的大小为整个堆的3/8左右, 通常为 Xmx 的 1/3 或 1/4)

-XX:+UseG1GC 启动G1收集器,它会从内存中删除垃圾对象

-XX:G1HeapRegionSize=16m :当使用 G1 收集器时,设置 java 堆被分割的大小。这个大小范围在 1M 到 32M 之间,比如我们给堆内存分配4G,那么每个范围的大小就是2M

-XX:G1ReservePercent=25 预留多少内存,防止晋升失败的情况,默认值是10

-Djava.security.egd=file:/dev/./urandom 加快随机数产生过程

-XX:InitiatingHeapOccupancyPercent=30 整个堆内存占了百分之30开始回收 垃圾回收不要设置年轻代大小会干预到G1

-XX:SoftRefLRUPolicyMSPerMB=0 每兆堆空闲空间中软引用(缓存)的存活时间。建议可以设置大一点1000-5000毫秒即可,保证系统稳定

-XX:SurvivorRatio=8

-XX:NewRatio=4     新生代:老生代  1:4

 

-XX:+DisableExplicitGC 禁止代码中显示调用 GC

-XX:+PrintGCDetails 打印 gc 日志的详细信息

-XX:+PrintGCDateStamps 输出 GC 的时间戳

-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间.可与上面混合使用

-XX:+PrintAdaptiveSizePolicy 打印自适应收集的大小。默认关闭

-XX:+UseGCLogFileRotation 打开或关闭 GC 日志滚动记录功能,要求必须设置

-XX:NumberOfGCLogFiles=5 设置滚动日志文件的个数

-XX:GCLogFileSize=30m 设置滚动日志文件的大小。
-verbose:gc 打印 GC 的简要信息

-Xloggc:aican_gc%t.log( JVM参数中添加GC日志,GC日志中会记录每次FullGC之后各代的内存大小,观察老年代GC之后的空间大小)
在GC日志文件,后缀前添加%t,可以解决日志回滚的缺点就不会覆盖掉旧的GC日志,可以自行选择GC日志存放目录

JVM关于堆内存的计算:

1.一般建议设置-Xms=-Xmx 好处是避免每次gc 后调整堆内存大小,减少系统内存分配的开销

2.设置持久代的大小,一般情况推荐把-XX:PermSize设置成-XX:MaxPermSize的值为相同的值,因为持久代大小的调整也会导致堆内存需要发出fgc(接口响应时间长)

3.整个堆大小=年轻代大小+老年代大小+持久代大小

4.老年代=整个堆-年轻代大小-持久代大小

-XX:NewRatio=4新生代占1,老年代占4,年轻代占整个堆的1/5
NewRatio值就是设置老年代的占比,剩下的1给新生代

tomcat8,JVM内存调优,根据服务器自身的内存情况进行优化:(这是根据我个人公司项目调优如下)  8g内存优化   tomcat位置和GC日志位置自行修改

JAVA_OPTS="-server -Xms3g -Xmx3g -XX:NewRatio=4 -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -Djava.security.egd=file:/dev/./urandom -XX:+UseG1GC -XX:G1HeapRegionSize=2m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=1000 -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -verbose:gc -Xloggc:/www/server/tomcat/GC/aican_gc%t.log"

内存堆大小 :4g 永久代(持久代): 1024m java 堆被分割的大小:2m

  

 

posted @ 2020-12-25 14:40  bathing  阅读(672)  评论(0)    收藏  举报
Live2D