Tomcat8性能JVM优化

JVM性能调优:
Tomcat性能JVM优化,主要调堆内存空间和GC算法;
要求每次GC时间足够短,每段时间GC次数足够少;
常见 catalina.sh 配置修改如下:
JAVA_OPTS=“$JAVA_OPTS -server -Xms1024m -Xmx1024m -Xss256k -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap_dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/tmp/heap_trace.txt -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m”

配置说明:
-Xms1024m #初始JVM堆大小1024M 一般堆内存使用1/4可用内存
-Xmx1024m #最大JVM堆大小1024M
-Xss256k #每个线程大小 一般256k
-XX:+UseParallelOldGC #设置并行年老代收集器
-XX:NewSize=256m -XX:MaxNewSize=256m #设置年轻代大小256 建议年轻代和年老代将根据默认的比例(1:4)分配堆内存
-XX:+HeapDumpOnOutOfMemoryError #可以控制JVM 在 OutOfMemoryError 时打印堆的信息
-XX:HeapDumpPath=/tmp/heap_dump #设置打印的位置
-XX:+PrintGCDetails #打印GC的详细信息
-XX:+PrintGCTimeStamps #打印GC的时间信息
-Xloggc:/tmp/heap_trace.txt #设置GC打印的日志名称
-XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m #设置元空间 非堆内存 一般126-200M

堆内存设置
-Xms:初始JVM堆大小 一般堆内存使用1/4可用内存
-Xmx:最大JVM堆大小 一般堆内存使用1/4可用内存
-XX:NewSize=n 设置年轻代大小
-XX:NewRatio=3 #年轻代和年老代将根据默认的比例(1:4)分配堆内存
设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n #默认是8可以使用默认值
年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
年轻代又分为Eden和Survivor区。Survivor区由FromSpace和ToSpace组成。Eden区占大容量,Survivor两个区占小容量,默认比例是8:1:1
-XX:NewSize=156m -XX:MaxNewSize=156m #设置年轻代堆大小 年轻代和年老代将根据默认的比例(1:4)分配堆内存

GC回收器设置
不同的GC回收器算法不一样,效率也不一样,主要看业务
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器

设置打Heap Dump信息
-XX:HeapDumpPath
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:/usr/aaa/dump/heap_trace.txt

问题一:
一个服务系统,经常出现卡顿,分析原因,发现Full GC时间太长
jstat -gcutil PID
S0 S1 E O P YGC YGCT FGC FGCT GCT
12.16 0.00 5.18 63.78 20.32 54 2.047 5 6.946 8.993
分析上面的数据,发现Young GC执行了54次,耗时2.047秒,每次Young GC耗时37ms,在正常范围,而Full GC执行了5次,耗时6.946秒,每次平均1.389s,数据显示出来的问题是:
Full GC耗时较长,分析该系统的是指发现,NewRatio=9,也就是说,新生代和老生代大小之比为1:9,
这就是问题的原因:新生代太小,导致对象提前进入老年代,触发老年代发生Full GC;
老年代较大,进行Full GC时耗时较大;
优化的方法是调整NewRatio的值,调整到4,发现Full GC没有再发生,只有Young GC在执行。这就是把对象控制在新生代就清理掉,
没有进入老年代(这种做法对一些应用是很有用的,但并不是对所有应用都要这么做;
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Tomcat中的JVM优化是指对Java虚拟机的调优,以提高Tomcat服务器的性能和稳定性。根据引用[1],Tomcat的JVM优化主要包括以下几个方面: 1. 内存设置:通过调整JVM堆内存大小,可以提高Tomcat的性能。可以通过修改Tomcat根目录下的bin目录中的catalina.sh(Linux)或catalina.bat(Windows)文件来设置JVM的内存参数,如-Xms和-Xmx参数分别用于设置JVM的初始堆大小和最大堆大小。 2. 垃圾回收设置:垃圾回收是JVM的重要功能,可以通过调整垃圾回收算法和参数来优化Tomcat的性能。可以使用-Xloggc参数来指定垃圾回收日志文件的路径,以便进行分析和调优。 3. 线程池设置:Tomcat使用线程池来处理客户端请求,可以通过调整线程池的大小和配置来优化Tomcat的性能。可以修改Tomcat根目录下的conf目录中的server.xml文件,通过修改Connector元素的属性来设置线程池的参数,如maxThreads和minSpareThreads。 4. 连接设置:可以通过调整Tomcat的连接参数来优化Tomcat的性能。例如,可以设置maxKeepAliveRequests属性来限制每个连接的最大请求数,以避免产生大量的TIME_WAIT连接。 需要注意的是,JVM优化需要根据具体的应用场景和硬件环境进行调整,不同的应用可能需要不同的优化策略。建议在进行JVM优化之前,先进行性能测试和监测,以便确定需要进行的优化方向和参数调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值