持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 24 天,点击查看活动详情
1 前言
现在的项目开发中,tomcat 作为常用的 java web 应用服务器,随着并发量的越来越高,tomcat 的性能会先上升然后下降,最终会导致系统的崩溃,那么如何在高并发的情况下如何提高或者优化 tomcat 的性能呢?
2 tomcat 运行模式
我们都知道 tomcat 默认情况下的运行模式是 BIO, 这种模式下性能比较低,没有经过任何优化处理。除此之外还有 NIO 模式,利用 java 的异步 IO 技术, 非阻塞 IO 技术,在该模式下运行则需要修改 server.xml 里面的 connector 节点的 protocol 配置信息,如下所示:
protocol="org.apache.coyote.http11.Http11NioProtocol"
除此之外,还有一种 APR 的模式,是从操作系统级别来解决异步 IO 问题,可以大幅度的提高性能,但是该模式执行起来比较困难,需要安装 APR 和 Native。
protocol="org.apache.coyote.http11.Http11AprProtocol"
以上便是 tomcat 的全部模式,但是更改运行模式需要重启后才能生效。
3 tomcat 并发优化
tomcat 的 jvm 调优,具体的参数配置如下所示:
# 需要在 tomcat 的家目录下寻找 catalina.sh 文件
TOMCAT_HOME/bin/catalina.sh
# 然后需要在文件中添加以下内容,这里和 springboot 项目启动配置文件类似
JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=512M -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m
关闭 dns 反向查询,需要在 server.xml 配置文件中的 connector 节点中添加以下配置 enableLookups="false"
优化 tomcat 参数配置如下所示:
<Connector port=”8080″
protocol=”org.apache.coyote.http11.Http11NioProtocol” // 配置成 nio 模式
connectionTimeout=”20000″ // 配置连接超时时长
redirectPort=”8443″
maxThreads=”500″//设定处理客户请求的线程的最大数量,默认200
minSpareThreads=”20″// 初始化线程池线程数,最小线程数,默认为10
acceptCount=”1000″ // 设置线程的最大接收数,超过这个数的请求将不予处理,默认1000
enableLookups=”false” // 禁用 dns 反向查找
URIEncoding=”UTF-8″ // 设置连接的字符集,设置为 utf8
/>
4 springboot 的 tomcat 配置
以上是 tomcat 的应用服务器的常用配置,但是在 springboot 项目中,也可以对 tomcat 进行配置,比如常用的 uri 字符集配置、tomcat 的线程配置、以及请求的最大报文数量。常见的配置如下所示:
5 总结
在本文中,主要讲述了 tomcat 优化相关的内容,分为 tomcat web 配置和 springboot 内置 tomcat 的配置。基于此,在后续的项目开发中,遇到 tomcat 优化的问题可以有所帮助。