简单尝试tomcat8优化的一些小技巧

在这里插入图片描述

前言

今天我们测试的是将springboot项目打成war包,然后外部进行tomcat优化,使用的是jmeter优化。

部署测试用的springboot项目

为了方便测试性能,我们将部署一个springboot项目,仅仅用于测试。

改造springboot打成war包项目

测试项目github地址: https://github.com/fafeidou/fast-cloud-nacos/tree/master/fast-common-examples/fast-common-tenant-example

  1. 将内嵌的tomcat排除掉,将项目打成war
		<packaging>war</packaging>
		
        <dependency>
			<groupId>fast.cloud.nacos</groupId>
			<artifactId>fast-common-tenant</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
                相当于compile,但是打包阶段做了exclude操作-->
			<scope>provided</scope>
		</dependency>
  1. 继承SpringBootServletInitializer,覆盖configure方法。

在这里插入图片描述

部署web应用

## 将war包拷贝到tomcat的root目录下面
cp fast-common-tenant-example-0.0.1-SNAPSHOT.war /Users/batman/software/apache-tomcat-8.5.49/webapps/ROOT

## 解压这个war包
jar -xvf fast-common-tenant-example-0.0.1-SNAPSHOT.war

## 启动tomcat并且查看日志
./startup.sh && tail -f ../logs/catalina.out

使用Apache JMeter进行测试

Apache Jmeter是开源的压力测试工具,我们借助于此工具进行测试,将测试出tomcat的吞吐量等信息。

下载安装

jmeter下载地址: https://jmeter.apache.org/

运行

bin目录下运行./jmeter.sh文件。

在这里插入图片描述

创建测试用例

在这里插入图片描述

添加线程组,使用线程模拟用户的并发

在这里插入图片描述
在这里插入图片描述
1000个线程,每个线程循环10次,也就是tomcat会接收到10000个请求。

添加http请求

在这里插入图片描述
在这里插入图片描述

添加请求监控

在这里插入图片描述

聚合报告

在这里插入图片描述

调整tomcat参数进行优化

通过上面测试可以看出,tomcat在不做任何调整时,吞吐量为961次/秒。

禁止AJP服务

修改conf下的server.xml文件,将AJP服务禁用掉即可。

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
    

在这里插入图片描述
可以看到,禁用AJP服务后,吞吐量会有所提升。
当然了,测试不一定准确,需要多测试几次才能看出是否有提升。

设置线程池

通过设置线程池,调整线程池相关的参数进行测试tomcat的性能。

最大线程数为500,初始为50

      <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="50"/>

测试结果:
在这里插入图片描述
吞吐量为1701次/秒,性能有所提升。

最大线程数为1000,初始为200

      <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="1000" minSpareThreads="200"/>

测试结果:

在这里插入图片描述
吞吐量为1795次/秒,性能有所提升。

最大线程数为5000,初始为1000

      <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="5000" minSpareThreads="1000"/>

测试结果:

在这里插入图片描述
可以看到,虽然最大线程已经设置到5000,但是实际测试效果并不理想,并且平均的响应时间也边长了,所以单纯靠提升线程数量是不能一直得到性能提升的。

设置最大等待队列数

默认情况下,请求发送到tomcat,如果tomcat正忙,那么该请求会一直等待。这样虽然可以保证每个请求都能请求到,但是请求时间就会边长。
有些时候,我们也不一定要求请求一定等待,可以设置最大等待队列大小,如果超过就不等待了。这样虽然有些请求是失败的,但是请求时间会虽短。典型的应用:12306。

<!‐‐最大等待数为100‐‐>
<Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐"
maxThreads="500" minSpareThreads="100"
prestartminSpareThreads="true" maxQueueSize="100"/>

测试结果:

在这里插入图片描述

吞吐量为1764次/秒,性能有所提升。可以看到平均响应时间和吞吐量都有所提升。

设置nio模式

将最大线程设置成500进行测试。

<Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐"
maxThreads="500" minSpareThreads="50"
prestartminSpareThreads="true"/>

<!‐‐ 设置nio2 ‐‐>
<Connector executor="tomcatThreadPool" port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />

测试结果:
在这里插入图片描述

可以看到,平均响应时间有缩短,吞吐量有提升,可以得出结论:nio2的性能要高于nio。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值