共计 4165 个字符,预计需要花费 11 分钟才能阅读完成。
tomcat 的优化可以提高网站的并发能力,体现个人的价值,tomcat 在 java 项目中的使用率非常高,所以在生产环境对 tomcat 的优化也就变得非常必要了,一般情况下 tomcat 的优化主要从两个方面入手,一个是自身配置,另一个是 tomcat 所运行的 jvm 虚拟机的优化,优化的工作可以从安装完 tomcat 就开始着手
一、AJP 优化
在前面的课程中我们提到了一个叫 AJP 的协议,同时我们也知道了这个 AJP 的作用,但是在生产环境中一般使用的是 nginx+tomcat 的架构,所以大多数时候用不到 AJP 协议,所以我们可以禁用它,而在我们的 server.xml 文件中这个 AJP 默认就是禁用的, 如果是其它版本最好看一下
[root@zutuanxue conf]# vim /opt/tomcat1/conf/server.xml
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
-->
二、运行模式优化
tomcat 的运行模式有 3 种:
bio
性能非常低下,没有经过任何优化处理和支持,适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,但程序直观简单易理解。
nio
nio(new I/O),是 Java SE 1.4 及后续版本提供的一种新的 I / O 操作方式它拥有比传统 I / O 操作 (bio) 更好的并发运行性能。Tomcat9 默认使用 nio 运行模式。适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂。AIO(NIO2)使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK7 开始支持。
apr
安装起来最困难,但是从操作系统级别来解决异步的 IO 问题,大幅度的提高性能
进入 tomcat 的服务器状态页面查看默认的模式
如果默认使用的是 bio 模式
设置使用 nio 模式
[root@zutuanxue logs]# vim /opt/tomcat1/conf/server.xml
<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"
redirectPort="8443" />
apr 运行模式
APR(Apache portable Run-time libraries,Apache 可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。可以大大地提高 Tomcat 对静态文件的处理性能。也是在 Tomcat 上运行高并发应用的首选模式。
系统自带的软件包不是最新的,且缺少相关软件包,所以我们选择源码包安装
所需软件包
apr-1.7.0.tar.gz 主程序包 包含了通用开发组件
apr-iconv-1.2.2.tar.gz 用于实现 iconv 编码
apr-util-1.6.1.tar.gz 额外的开发组件
tomcat-native.tar.gz 关联 tomcat 和 apr 的组件
arp 相关软件包下载 https://mirrors.cnnic.cn/apache/apr/
tomcat-native 在 tomcat 安装目录的 bin 下
部署 apr 环境
step 1 环境准备
[root@zutuanxue ~]# dnf install -y apr-devel openssl-devel gcc make expat-devel libtool
step 2 安装 apr 主程序包
[root@zutuanxue ~]# tar fx apr-1.7.0.tar.gz
[root@zutuanxue ~]# cd apr-1.7.0/
[root@zutuanxue ~]# ./configure --prefix=/usr/local/apr
[root@zutuanxue apr-1.7.0]# make -j4 && make install
step 3 安装 apr-iconv
[root@zutuanxue ~]# tar fx apr-iconv-1.2.2.tar.gz
[root@zutuanxue ~]# cd apr-iconv-1.2.2/
[root@zutuanxue ~]# ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-iconv
[root@zutuanxue apr-iconv-1.2.2]# make -j4 && make install
step 4 安装 apr-util
[root@zutuanxue ~]# tar fx apr-util-1.6.1.tar.gz
[root@zutuanxue ~]# cd apr-util-1.6.1/
[root@zutuanxue ~]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
[root@zutuanxue apr-util-1.6.1]# make -j4 && make install
step 5 安装 tomcat-native
[root@zutuanxue ~]# cd /opt/tomcat1/bin/
[root@zutuanxue bin]# tar fx tomcat-native.tar.gz
[root@zutuanxue bin]# cd tomcat-native-1.2.23-src/native
[root@zutuanxue tomcat-native-1.2.23-src]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk-13.0.2
[root@zutuanxue tomcat-native-1.2.23-src]# make -j4 && make install
step 6 修改并加载环境变量
[root@zutuanxue ~]# echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /etc/profile
[root@zutuanxue ~]# source /etc/profile
step 7 修改 tomcat 配置文件
[root@zutuanxue ~]# vim /opt/tomcat1/conf/server.xml
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
step 8 测试
# 为了避免干扰先执行关闭
[root@zutuanxue ~]# sh /opt/tomcat1/bin/shutdown.sh
# 测试
[root@zutuanxue ~]# sh /opt/tomcat1/bin/catalina.sh run
# 如果没有问题可以看到
14-Mar-2020 00:22:23.894 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-apr-8080"]
注意:如果非 root 用户启动失败,把 apr 环境变量在当前用户的.bash_profile 中写一份
[root@zutuanxue ~]# echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /root/.bash_profile
[root@zutuanxue ~]# source /root/.bash_profile
其它优化参数
[root@zutuanxue logs]# vim /opt/tomcat1/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1 enableLookups="false"maxThreads="1000"minSpareThreads="100"acceptCount="900"disableUploadTimeout="true"connectionTimeout="20000"URIEncoding="UTF-8"redirectPort="8443"compression="on"compressionMinSize="1024"useSendfile="false"noCompressionUserAgents="mozilla, traviata"compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript " />
maxThreads:最大线程数,默认 150。增大值避免队列请求过多,导致响应缓慢。minSpareThreads:最小空闲线程数。acceptCount:当处理请求超过此值时,将后来请求放到队列中等待。disableUploadTimeout:禁用上传超时时间
connectionTimeout:连接超时,单位毫秒,0 代表不限制
URIEncoding:URI 地址编码使用 UTF-8
enableLookups:关闭 dns 解析,提高响应时间
compression:启用压缩功能
compressionMinSize:最小压缩大小,单位 Byte
compressibleMimeType:压缩的文件类型
官方参数文档:http://tomcat.apache.org/tomcat-9.0-doc/config/http.html