我们知道,一般我们部署项目使用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里的连接端口号
启动tomcat并且查看日志
./startup.sh && tail -f ../logs/catalina.out
这个时候我们可以访问http://服务器ip:8888了
我们可以通关jps命令来查看java的进程:Bootstrap就是我们的tomcat了。
二、tomcat配置的优化方案
tomcat的配置优化方案有三种:
1.禁用AJP连接
omcat的从tomcat启动的日志我们可以看到,默认状态下会启动AJP服务,并且占用8009端口,同时默认采用的也是nio的运行模式,这个也是后面其他优化的方案之一。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
可以看到AJP已经不见了
2.使用线程池
<!‐‐将注释打开‐‐><Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐"maxThreads="500" minSpareThreads="50"prestartminSpareThreads="true" maxQueueSize="100"/><!‐‐参数说明:maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业务来判断minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了maxQueueSize,最大的等待队列数,超过则拒绝请求这里得注意下是当我们打开引用线程连接的配置,记得注释掉原来的连接。‐‐>
<Connector executor="tomcatThreadPool" port="8888" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"
我们可以从首页的server status进入看到已经开启线程了(至于没有权限访问server status报403可以看下面我推荐的一篇解决403无权限问题的文章,是我找到好几篇唯一可以解决tomcat8成功的)
3.三种运行模式选择
<Connector executor="tomcatThreadPool"
port="8888" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />
可以看到启动日志已经成功设置成nio2了
三、部署web项目来测试优化效果
这里先使用未配置任何优化的tomcat8,并且清空其他所有webapps下的文件,部署一个web项目在tomcat中进行测试,通关对其主页index并发的访问来测试性能。既然测试性能就得有可视化的测试工具来的直观,这里使用Apache JMeter进行测试
服务器:tomcat8
测试项目:一个web项目+mysql数据库
测试软件:Apache JMeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi
1.启动Apache JMeter
2.创建测试用例
3.创建聚合报告
4.启动和测试:因为时间问题,我只测试10个线程访问10次
1.无任何优化
2.禁用pjs
3.开启线程池
4.开启nio2
我们可以看出,这三个优化方案都能让响应时间和吞吐量提升,本人的服务器也是不行,所以没开那么多线程,而且还得多次重复取平均值,开太多线程容易卡死,而且特别费时间。
参考资料:
访问tomcat的server status报403解决方法:https://blog.csdn.net/b296405422/article/details/88393100