关于自己对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

浙公网安备 33010602011771号