Tomcat 并发设置与优化

本文详细介绍了Tomcat服务器的并发设置与优化策略,包括minProcessors、maxProcessors、acceptCount等关键参数的解释与调整建议,以及BIO、NIO、APR等不同连接器类型的优缺点对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tomcat 并发设置与优化

在Tomcat配置文件conf下面 server.xml 中的配置中和连接数相关的参数有:

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

具体代码:

<Connector port=“8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="600" 
    minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000"
    redirectPort="8443"
	maxHttpHeaderSize="8192"  
    tcpNoDelay="true"  
    compression="on"  
    compressionMinSize="2048"  
    disableUploadTimeout="true"  
    enableLookups="false"  
    URIEncoding="UTF-8"
 />

参数说明:

protocol=“org.apache.coyote.http11.Http11NioProtocol” 使用java的异步io护理技术,no blocking IO

maxThreads=“600" 表示最多同时处理600个连接最大线程数

minSpareThreads=“100" 表示即使没有人使用也开这么多空线程等待,初始化时创建的线程数

maxSpareThreads=“500" 表示如果最多可以空500个线程,例如某时刻有505人访问,之后没有人访问了,则tomcat不会保留505个空线程,而是关闭505个空的。 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

acceptCount=“700” 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

connectionTimeout:当请求已经被接受,但未被处理,也就是等待中的超时时间。单位为毫秒,默认值为60000。通常情况下设置为30000。

maxHttpHeaderSize:请求和响应的HTTP头的最大大小,以字节为单位指定。如果没有指定,这个属性被设置为8192(8 KB)。

tcpNoDelay:如果为true,服务器socket会设置TCP_NO_DELAY选项,在大多数情况下可以提高性能。缺省情况下设为true。

compression:是否启用gzip压缩,默认为关闭状态。这个参数的可接受值为“off”(不使用压缩),“on”(压缩文本数据),“force”(在所有的情况下强制压缩)。

compressionMinSize:如果compression=“on”,则启用此项。被压缩前数据的最小值,也就是超过这个值后才被压缩。如果没有指定,这个属性默认为“2048”(2K),单位为byte。

disableUploadTimeout:这个标志允许servlet Container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。如果没有指定,设为false。

enableLookups:关闭DNS反向查询。

URIEncoding:URL编码字符集。

其中Connector 支持参数属性可以参考Tomcat官方网站(https://tomcat.apache.org/tomcat-8.0-doc/config/http.html)

BIO、NIO、APR

通过配置 protocol的类型可以使用不同的 Connector处理请求。

Java代码 收藏代码

//BIO
protocol=“HTTP/1.1”
//NIO
protocol=“org.apache.coyote.http11.Http11NioProtocol”
//NIO2
protocol=“org.apache.coyote.http11.Http11Nio2Protocol”
//APR
protocol=“org.apache.coyote.http11.Http11AprProtocol”

以下是几种类型 Connector的参数对比:

并不是说 BIO的性能就一定不如 NIO,这几种类型 Connector之间并没有明显的性能区别,它们之间实现流程和原理不同,所以它们的选择是需要根据应用的类型来决定的。

BIO更适合处理简单流程,如程序处理较快可以立即返回结果。简单项目及应用可以采用BIO。

NIO更适合后台需要耗时完成请求的操作,如程序接到了请求后需要比较耗时的处理这已请求,所以无法立即返回结果,这样如果采用BIO就会占用一个连接,而使用NIO后就可以将此连接转让给其他请求,直至程序处理完成返回为止。

APR可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。

ajp协议优化

如果使用apache和tomcat做集群的负载均衡,并且使用ajp协议做apache和tomcat的协议转发,需要优化ajp connector。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值