关于Tomcat8配置优化的几个方法讲解

时间:2024-04-06 22:19:44

我们知道,一般我们部署项目使用tomcat服务器的频率是非常高的,所以说在生产环境上对tomcat的优化也是非常重要的。对于tomcat的优化,我们主要从两个方面入手,一是tomcat自身的配置,二是tomcat运行的jvm虚拟机的调试。我的这篇文章主要讲如果通过tomcat自身的配置调试优化,并且测试其优化的效果。

 

一、配置tomcat8服务器

我们可以去官网下载tomcat:https://tomcat.apache.org/download-80.cgi

这里我使用的xshell远程连接到linux服务器,下载完tomcat我们可以使用rz命令上传tomcat压缩包到服务器

如果出现找不到rz命令

[[email protected] test]# rz

bash: /usr/bin/rz: No such file or directory

需要先安装lrzsz包,调用以下命令

yum install lrzsz

这个时候我们上传完tomcat后便可以解压tomcat压缩包并且删除,同时我们修改tomcat管理用户的配置文件

tar -xvf apache-tomcat-8.5.34.tar.gz

rm -rf apache-tomcat-8.5.34.tar.gz

同时因为我的8080端口已经被其他的占用,并且我是阿里云服务器,所以我给自己开了个端口8888并且修改了tomcat的server.xml里的连接端口号

关于Tomcat8配置优化的几个方法讲解

启动tomcat并且查看日志

./startup.sh && tail -f ../logs/catalina.out 

这个时候我们可以访问http://服务器ip:8888了

关于Tomcat8配置优化的几个方法讲解

我们可以通关jps命令来查看java的进程:Bootstrap就是我们的tomcat了。

关于Tomcat8配置优化的几个方法讲解

 

二、tomcat配置的优化方案

tomcat的配置优化方案有三种:

1.禁用AJP连接

omcat的从tomcat启动的日志我们可以看到,默认状态下会启动AJP服务,并且占用8009端口,同时默认采用的也是nio的运行模式,这个也是后面其他优化的方案之一。

关于Tomcat8配置优化的几个方法讲解

什么是AJP呢?
AJPApache JServer Protocol
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省
SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且
在多个请求和响应周期过程会重用连接。
关于Tomcat8配置优化的几个方法讲解
我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
修改conf下的server.xml文件,将AJP服务禁用掉即可。(使用<!--  -->注释掉)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

可以看到AJP已经不见了

关于Tomcat8配置优化的几个方法讲解

2.使用线程池 

tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
修改server.xml文件:
<!‐‐将注释打开‐‐>
<Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐"
maxThreads="500" minSpareThreads="50"
prestartminSpareThreads="true" maxQueueSize="100"/>
<!‐‐
参数说明:
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业
务来判断
minSpareThreadsTomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads
参数值,如果不等于 trueminSpareThreads 的值就没啥效果了
maxQueueSize,最大的等待队列数,超过则拒绝请求
这里得注意下是当我们打开引用线程连接的配置,记得注释掉原来的连接。
‐‐>

 

<Connector executor="tomcatThreadPool" port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"

 

 

我们可以从首页的server status进入看到已经开启线程了(至于没有权限访问server status报403可以看下面我推荐的一篇解决403无权限问题的文章,是我找到好几篇唯一可以解决tomcat8成功的)

关于Tomcat8配置优化的几个方法讲解

3.三种运行模式选择

tomcat的运行模式有3种:
1. bio
默认的模式,性能非常低下,没有经过任何优化处理和支持.
2. nio
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(java.nio包及
其子包)Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio
也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性
能。
3. apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
推荐使用nio,不过,在tomcat8中有最新的nio2,速度更快,建议使用nio2,而tomcat7中是默认bio
设置nio2
<Connector executor="tomcatThreadPool"
               port="8888" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
               connectionTimeout="20000"
               redirectPort="8443" />

可以看到启动日志已经成功设置成nio2了

关于Tomcat8配置优化的几个方法讲解

 

三、部署web项目来测试优化效果

这里先使用未配置任何优化的tomcat8,并且清空其他所有webapps下的文件,部署一个web项目在tomcat中进行测试,通关对其主页index并发的访问来测试性能。既然测试性能就得有可视化的测试工具来的直观,这里使用Apache JMeter进行测试

服务器:tomcat8

测试项目:一个web项目+mysql数据库

测试软件:Apache JMeter  下载地址:http://jmeter.apache.org/download_jmeter.cgi

1.启动Apache JMeter

关于Tomcat8配置优化的几个方法讲解

2.创建测试用例

关于Tomcat8配置优化的几个方法讲解

关于Tomcat8配置优化的几个方法讲解

3.创建聚合报告

关于Tomcat8配置优化的几个方法讲解

4.启动和测试:因为时间问题,我只测试10个线程访问10次

1.无任何优化

关于Tomcat8配置优化的几个方法讲解

2.禁用pjs

关于Tomcat8配置优化的几个方法讲解

3.开启线程池

关于Tomcat8配置优化的几个方法讲解

4.开启nio2

关于Tomcat8配置优化的几个方法讲解

我们可以看出,这三个优化方案都能让响应时间和吞吐量提升,本人的服务器也是不行,所以没开那么多线程,而且还得多次重复取平均值,开太多线程容易卡死,而且特别费时间。

 

 

参考资料:

访问tomcat的server status报403解决方法:https://blog.csdn.net/b296405422/article/details/88393100