前几天阿粉的一个小学弟在咨询阿粉面试的时候怎么还会问到关于Tomcat调优和JVM优化,我听完这个的时候,当时就想说,问这个不是应该的么?那么下面阿粉就给大家好好的掰扯掰扯这个Tomcat优化和 JVM 参数优化的事情
Tomcat
关于Tomcat是什么东西,相信大家做开发的,肯定是一点也不陌生,服务器,Web应用服务器,一种轻量级的应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
而我们在日常的开发中,可能很大一部分我们只是知道怎么使用Tomcat服务器,但是却不知道怎么去调整Tomcat里面的各种配置参数,让Tomcat能够更好的运行,那么就听阿粉来给大家介绍把。
配置文件修改优化
Tomcat在Windows下一般的目录都是我们下载解压出来的目录也就是${TOMCAT_HOME},就像这个样子 D:\develop\tomcat\apache-tomcat-7.0.88,而他的配置文件就是conf下的server.xml文件,而我们需要调优的肯定也是这个文件里面的内容。
我们就先从 Connector 来进行分析:
Connector :连接器,负责接收客户的请求,以及向客户端回送响应的消息
而我们对 Connector 优化,其实优化的就是我们在访问请求时候的并发能力,而往往并发也是我们在工作中很多时候需要去考虑的问题,而我们在这个连接器里面可以配置什么内容呢?
"tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
我们最常用的就是在里面配置一个URL的统一编码格式比如说我们在里面配置一个 UTF-8 的编码格式。
URIEncoding
:URIEncoding = UTF-8
executor
: 指定这个连接器所使用的执行器(线程池)
connectionTimeout
:连接超时时间
maxThreads
:客户请求最大线程数
minSpareThreads
:Tomcat初始化时创建的线程数,一直会运行的线程
maxSpareThreads
:Tomcat连接器的最大空闲线程数
minProcessors
:服务器创建时的最小处理线程数
maxProcessors
:服务器同时最大处理线程数
enableLookups
:若设为true, 则支持域名解析,可把 ip 地址解析为主机名,而为了减少性能的消耗的话,我们就有时候会关闭它
redirectPort
:在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount
:监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
而我们一般最常搭配的,却是 URIEncoding 而很少的去改其他的配置,但是在面试中,肯定不会说让你去优化编码格式把,而我们修改的一定是其他的关于最大处理线程数,域名解析啦,
而我们在最终的配置就不再是上面的代码了,而变成了优化之后的:
"8080"
protocol="HTTP/1.1"
connectionTimeout="20000" 超时时间,毫秒
redirectPort="443"
maxThreads="3000" 最大线程数
minSpareThreads="20" 最小空闲线程数,这里是一直会运行的线程
acceptCount="1000" 监听端口队列数
enableLookups="false" 关闭dns解析,减少性能损耗
server="None"
URIEncoding="UTF-8"
/>
NIO和BIO还有 NIO2
其实关于 NIO 和 BIO 和 AIO 阿粉在之前已经完全都说过了,同步阻塞 IO 就是 BIO ,而同步非阻塞IO和异步阻塞IO 就是 NIO ,而异步非阻塞IO就是 AIO 啦,
BIO :同步阻塞IO
NIO :同步非阻塞IO和异步阻塞IO
AIO :这种异步非阻塞 IO 是我们最需要注意的,是从 JDK7 及其以上才会支持的。
话不多说,直接上如何修改,
"20000" port="8080" protocol="HTTP/1.1"