1、tomcat自动部署问题。
tomcat6.x跟7.x默认情况下 unpackWARs="true" autoDeploy="true",也就是拷贝war到webapp下面tomcat会自动解压并部署,但是一般情况下是关闭这个的,因为线上不停止服务器而更新容易出现数据错误问题。所以unpackWARs="true" autoDeploy="false",但是这里有一个问题,貌似是tomcat的一个小bug。停止tomcat,部署新的war包上去,再重启,应该是发现新的war包然后解压覆盖旧的,但是实际情况是不会部署新的包,官方文档描述是会重新部署的,但是实际情况却不是这样。具体原因不明,现在为了保证最新代码,我都是直接删除原来的。
2、tomcat最大线程数,最大排队数的配置。
首先发现网上漫天的资料都是很老的版本,现在应该都是tomcat6.0或者7.0的了。所以很多老的配置已经过时了。比如minProcessors,maxProcessors这两个值网上大多资料说明修改他们俩,但是这两个值在
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html 官方的说明中并不存在。
Each incoming request requires a thread for the duration of that request. If more simultaneous requests are received than can be handled by the currently available request processing threads,
additional threads will be created up to the configured maximum (the value of the maxThreads attribute). If still more simultaneous requests are received, they are stacked up inside the server socket created by theConnector, up to the configured maximum (the
value of the acceptCount attribute). Any further simultaneous requests will receive "connection refused" errors, until resources are available to process them.
如果我们达到更多的并发请求,而这些请求不是我们当前的进程线可以处理得了的,那么额外的线程就会被重新配置以达到配置最大化(maxThreads属性所设定的值)。如果还有并发要求,那么他们就会被并入由连接器创建得服务器接口,从而达到配置最大化(直至达到acceptCount属性所设定的值)。
这个是tomcat官方的解释,在文中很清楚的说明了,修改最大连接数的办法。
maxThreads:The maximum number of request processing threads to be created by
this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200. If an executor is associated with this connector, this attribute is ignored as the connector will execute
tasks using the executor rather than an internal thread pool.
处理request的最大线程数是由Connector决定的。这个值决定着目前可处理的最大并发数,如果没有设置,默认值为200,如果executor 与connector相关联,那么这个值将会被忽略,
acceptCount:The maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received
when the queue is full will be refused. The default value is 100.
网上很多资料显示,linux的最大线程数是1000,window会高一点2000多。这个应该是根据机器cpu等的性能来计算的。
实际的配置数据应该是根据自己的机器与负载情况多尝试找一个最优配置。
3、tomcat的BIO,NIO,APR三种高级Connector运行模式。
tomcat支持以上三种运行模式。
BIO:同步阻塞,是一个连接一个线程。客户端有链接请求时服务器就启动一个线程处理,链接不操作会造成资源浪费,可以考虑线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。
NIO:同步非阻塞,是一个请求一个线程。客户端所有的连接请求都会注册到多路复用器,多路复用器轮询到连接有I/O请求时启动一个线程处理。适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。
AIO:异步非阻塞,是一个有效请求一个线程。服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS完成再通知服务器启动线程处理。适用于连接数目多且连接比较长的架构,比如相册服务器,
4、附加几个常用参数的解释。
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,通常可设置为20000毫秒。
URIEncoding:指定Tomcat 容器的URL
编码格式。
enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。建议设置false,能提高部分性能。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
minSpareThreads:表示即使没有人使用也开这么多空线程等待
.
maxConnections:这个貌似应该是新加的参数吧,我没求证。服务器能接受和处理的最大数量,bio默认是maxThreads
的值,nio默认10000,APR/native 默认是8192。
keepAliveTimeout:这个是保持长连接的时间限制,默认就是connectionTimeout 设置的时间。
maxSpareThreads:表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。这个参数在7.0也删掉了。
unpackWARs:如果为true ,则tomcat 会自动将WAR 文件解压,否则不解压,直接从WAR 文件中运行应用程序