Tomcat调优笔记

本文是在Tomcat调优过程中得到的心得(会持续更新),相关环境:

  • java version "1.8.0_131"

  • Tomcat 8.5.14

  • Jmeter 3.1

Jmeter参数:

Tomcat server.xml参数:

  • protocol="org.apache.coyote.http11.Http11Nio2Protocol"

  • acceptCount="5000"

  • maxConnections="20000"

Tomcat JVM参数:-server -Xms4g -Xmx4g

JIT的介入

Tomcat server.xml都保持默认值。

在不重启Tomcat的情况下,两次benchmark得到的throughput数据相差较大:

  1. 第一次:9000/s

  2. 第二次:17000/s

这也就说明,在Tomcat存在warmup机制,性能表现在warmup之后会更好。

在利用jvisualvm收集了两次benchmark的相关数据,发现这和JDK的compilerThread存在关系,图表如下:

图片描述

在第一次benchmark的前期,compilerThread动作比较多,此时NIO的吞吐量一直维持在比较低的水平。在第一次benchmark后期,compilerThread降下来了,NIO的吞吐量就上去了。

第二次benchmark几乎没有compilerThread的动作,此时NIO的吞吐量一直维持在比较高的水平。

在经过一番调查之后,发现这是由于JIT对代码做优化,JIT会将频繁执行的代码的bytecode编译成native code,从而加快执行速度。参考文章如下:

maxThreads

根据Tomcat文档的说法,此参数决定了同时最多能够处理多少请求,默认值是200。而我们的Jmeter脚本是300并发,显然不够,所以调整server.xml追加Connector参数:

maxThreads="500"
minSpareThreads="500"

这么配置是提高Tomcat处理线程数,maxThreadsminSpareThreads设置为一样是让Tomcat在启动时就创建1000线程,这个和把JVM参数-Xms-Xmx设置为一样是一个道理。

在不重启Tomcat的情况下,两次benchmark得到的throughput数据:

  1. 第一次:12000/s

  2. 第二次:17000/s

这说明在没有warmup的情况下,maxThreads的提升能够提升Tomcat的性能表现。

关于maxThreads应该设置多少为合适可以见SO的这个回答:

processorCache

processorCache控制Tomcat内部RequestProcessor的缓存池大小,当并发量大于此值时,Tomcat会创建新的RequestProcessor实例,如果并发量持续大于此值,则会持续创建RequestProcessor实例。

在这次压力测试过程中,发现如果processorCache=100时,Tomcat只会保留100个RequestProcessor,并且会不断创建其实例。见下图:图片描述

如果processorCache=400,则Tomcat会保留300个RequestProcessor,并且不会创建新的实例,主要是因为Jmeter的线程数为300,也就是说同时最多只会有300个connection,每个connection对应一个RequestProcessor

从测试结果上看,processorCache=100时似乎并不影响测试结果。

gzip压缩

和gzip压缩相关的参数有:compressioncompressibleMimeType compressionMinSize ,Tomcat默认是关闭gzip压缩的,gzip压缩能够显著降低带宽。

以下是在warmup之后的benchmark结果,开启gzip能得到17%的性能提升:

  • compression="on":17073.6/s

  • compression="off":14548.3/s

但是在benchmark多次之后,发现开启和不开启的结果相近。

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Tomcat调优面试题的答案: 1. Tomcat的缺省端口是多少,怎么修改? Tomcat的缺省端口是8080,可以通过修改server.xml文件中的Connector节点来修改端口号。 2. tomcat 有哪几种Connector 运行模式(优化)? Tomcat有三种Connector运行模式:BIO、NIO和APR。其中,BIO是传统的阻塞式I/O模式,NIO是非阻塞式I/O模式,APR是使用本地库实现的高性能模式。 3. Tomcat有几种部署方式? Tomcat有两种部署方式:WAR包部署和目录部署。WAR包部署是将应用程序打包成WAR包,然后将WAR包放到Tomcat的webapps目录下;目录部署是将应用程序解压到Tomcat的webapps目录下。 4. tomcat容器是如何创建servlet类实例?用到了什么原理? Tomcat容器在启动时会扫描web.xml文件,将其中的servlet类加载到内存中,并创建servlet实例。Tomcat使用Java反射机制来创建servlet实例。 5. tomcat 如何优化? Tomcat的优化可以从多个方面入手,包括内存调优、垃圾回收策略调优、共享session处理、添加JMS远程监控、使用专业的分析工具等。 6. 内存调优 可以通过调整JVM的内存参数来进行内存调优,例如-Xms和-Xmx参数可以分别设置JVM的初始内存和最大内存。 7. 垃圾回收策略调优 可以通过调整JVM的垃圾回收策略来进行垃圾回收策略调优,例如使用CMS垃圾回收器或G1垃圾回收器。 8. 共享session处理 可以使用集中式session管理方案,例如使用Redis等缓存服务器来存储session数据,从而实现session共享。 9. 添加JMS远程监控 可以使用JMX来进行远程监控,例如使用JConsole等工具来监控Tomcat的运行状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值