原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。
tomcat这只老猫为何能活过普通猫咪能活的年龄?这与它轻巧的构造有关,还与它卓越的性能有关。现在的tomcat,版本已经飙到10了!最新的版本是10.0.2
。
tomcat的配置参数奇多,但想要达到优化效果,我们并不需要全部关注。本文将详细介绍一些主要的配置参数,保证让你这只老猫跑的更快!
一般最常做的更改,就是修改服务器的端口,也就是server.xml
里的Connector
部分。典型如下图所示:
其实,大部分优化,也是在Connector标签之内,从端口、并发到线程,都可以在这里配置。
作为一个能承接高并发互联网请求的Web容器,首当其冲的当然是海量请求的冲击。幸运的是Tomcat支持NIO,我们可以通过调整线程数和并发配置,让它表现出最佳的性能。
maxThreads
-- tomcat接收客户端请求的最大线程数,也就是同时处理任务的个数,它的默认大小为200
;一般来说,在高并发的I/O密集型应用中,这个值设置为1000
左右比较合理maxConnections
这个参数是指在同一时间,tomcat能够接受的最大连接数。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxThreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000,所以这个参数我们一般保持不动即可acceptCount
-- 当线程数量达到上面设置的值,所能接受的最大排队数量。超过了这个值,请求就会被拒绝。我一般会设置成和maxThreads设置成一样大的简单说明一下上面三个参数的关系:
系统能够保持的连接数
maxConnections+acceptCount,区别是maxConnections中的连接可以被调度处理;acceptCount中的连接只能等待排队
系统能处理的请求数
maxThreads的大小,实际能够工作的线程数量。
幸福指数:maxThreads > maxConnections > acceptCount。
现在有些文章还充斥着maxProcessors
和minProcessors
。但这两个参数,从Tomcat5开始被deprecated,从6开始就彻底没了。
只能说你看到的这些文章,可能真的是不懂技术的运营发表的。
以8为代表,具体配置参数可以参见:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html
在并发配置方面,可以看到我们只有minSpareThreads
,但是却没有maxSpareThreads
。这是因为,从Tomcat 6开始增加Executor 节点,这个参数已经没用了。
由于线程是一个池子,所以它的配置,满足池的一切特点。
参照:https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html
namePrefix
-- 每个新开线程的名称前缀maxThreads
-- 线程池中的最大线程数minSpareThreads
-- 一直处于活跃状态的线程数maxIdleTime
-- 线程的空闲时间,在超过空闲时间时这些线程则会被销毁threadPriority
-- 线程池中线程的优先级,默认为5tomcat是Java应用,所以JVM的配置同样会影响它的性能。比较重要的配置参数如下。
首先要调整的,就是各个分区的大小,不过这也要分垃圾回收器,我们仅看一下一些全局的参数。
G1垃圾回收器
再看几个在Connector中配置的重要参数。
enableLookups
-- 调用request
、getRemoteHost()
执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址。这个要根据需求来URIEncoding
-- 用于解码URL的字符编码,没有指定默认值为ISO-8859-1
connectionTimeout
-- 连接的超时时间(以毫秒为单位)redirectPort
-- 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号tomcat是最常用的web容器,提供了数百个配置参数。但我们在平常的使用中,没必要把所有的参数都弄清楚,只关注最重要的就可以了。