前言
Tomcat作为Web应用的服务器,目前绝大多数公司都是用其作为应用服务器的,应用服务器的执行效率会影响系统执行,这里会讲Tomcat怎样进行配置能提高处理性能。另外必须提到对应的JVM参数的优化的一些经验。
Tomcat运行模式
分3种模式: bio,nio,apr 一般使用nio模式
bio效率低,apr对系统配置有一些比较高的要求
确认Tomcat的运行模式
配置文件 server.xml
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="1024"
minSpareThreads="512"
prestartminSpareThreads="true" />
关键配置
maxThreads
最大线程数, 默认是200
minSpareThread
最小活跃线程数, 默认是25
maxQueueSize
最大的等待队列个数,超过则请求拒绝默认值是Integer.MAX_VALUE ,一般不改变。在某些紧急状态修复问题需要调整
连接器(Connector)优化
Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息。所以Connector的优化是重要部分。默认情况下 Tomcat只支持200线程访问,超过这个数量的连接将被等待甚至超时放弃,所以我们需要提高这方面的处理能力。
nio配置- server.xml
<Connector port="14081" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
executor="tomcatThreadPool"
URIEncoding="UTF-8"
compression="on"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="14443" />
影响性能配置
- protocol
org.apache.coyote.http11.Http11Protocol
- 阻塞式的Java连接器
org.apache.coyote.http11.Http11NioProtocol
- 不阻塞Java连接器
org.apache.coyote.http11.Http11AprProtocol
- APR / native 连接器
选择不阻塞ava连接器
- enableLookups
若是你想request.getRemoteHost()的调用履行,以便返回的长途客户端的实际主机名的DNS查询,则设置为true。设置为false时跳过DNS查找,并返回字符串的IP地址(从而提高性能)。默认场景下,禁用DNS查找
- compression
设置成on,开启压缩
禁用AJP链接器
使用Nginx+tomcat的架构,用不着AJP协议,所以把AJP连接器禁用
server.xml注释掉以下配置
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
思考题
1. 线上应用系统出现问题,怎么快速定位系统哪块资源问题