- Tomcat配置优化
springboot默认都集成了下面这些配置优化
- 如果项目只提供接口,没有静态资源的, 可移除我们conf/web.xml视图层组件JspServlet配置
比如微服务项目,没有jsp的加载// 移除tomcat中,conf/web.xml的下面配置 <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> ......
- 去除conf/web.xml中的welcome-file-list欢迎页配置
- 去除conf/web.xml中返回类型的多余配置,微服务项目默认都是json返回类型
<mime-mapping>作用就是告诉给浏览器处理的格式
- 去除conf/web.xml中tomcat集群的session配置
几乎在很多公司都是采用token替代Session session-config
- 移除conf/server.xml中每次请求打印日志: AccessLogValve, 因为大多数都采用nginx记录每次请求地址
去除该配置后,tomcat将不再生成下面记录日志// 去除config/server.xml的如下配置 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
- 移除conf/server.xml中修改autoDeploy=属性(默认true)
autoDeploy=true 表示tomcat在启动的时候,开启周期性的检查有没有应用更新和部署!
autoDeploy=false --生产环境中设置为false,关闭 - 移除conf/server.xml中修改reloadable=属性(默认false)
reloadable=true 表示tomcat会监听WEB-INF/lib和WEB-INF/classes的变化,如果有,则tomcat重新加载
默认tomcat没有开启配置
- tomcat线程池优化
- Tomcat中分为以下四种IO模型
a. BIO 使用传统io模型处理我们请求 阻塞io;
b. NIO 同步非阻塞式io 效率比BIO提高非常多倍 --tomcat8后也采用了该模型
c. AIO 异步非阻塞形式
d. APR tomcat以JNI形式调用http服务器的核心动态链接库来处理文件读取或网络传输操作,需要编译安装APR库。
使用jconsole连接,查看线程,可以通过线程名称判断出:
Springboot内嵌的tomcat使用的是: NIO,外部tomcat再之前使用的是: APR
优化: 修改config/server.xml, 修改外部tomcat的IO模型为:NIO// 默认APR模型 <Connector port="2017" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // 修改NIO模型 <Connector port="2017" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> ---其他IO模型配置--- BIO: protocol ="org.apache.coyote.http11.Http11Protocol" NIO: protocol ="org.apache.coyote.http11.Http11NioProtocol" AIO: protocol ="org.apache.coyote.http11.Http11Nio2Protocol" APR: protocol ="org.apache.coyote.http11.Http11AprProtocol"
- tomcat线程池优化
在config/server.xml中配置线程池
maxThreads参数表示我们做多同时存在150个线程;// 默认注释掉的 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="10"/>
minSpareThreads 最小活跃的线程是为10个;tomcat启动就一直存在
--表示tomcat启动时有10的线程,如果有150个请求过来,就会再创建140(一共150)个线程去处理请求,处理完成后就会销毁140个,一直保留10个!
如何配置和引用:在config/server.xml配置如下
根据实际项目情况配置线程数
1.如果并发量比较大的情况下 最小活跃线程建议设置比较大,可以避免重复处理线程 可以增加吞吐量;如果最小活跃的线程如果比较大的情况下,非常占用cpu资源;
2. 如果是项目的并发量比较小的情况下,最小活跃线程可以设置小一点,可以节约cpu内存
实际案例:
通过监控工具监控线程,如果一个项目20/s请求, tomcat线程池 最大线程树为100 最小活跃线程树30 - Connector的优化
a.8080 Http协议 处理我们的请求
b.8009 ajp协议 属于tomcat内部通讯端口号
建议在config/server.xml中移除ajp协议 8009端口监听 减少我们服务器内存消耗