Tomcat 部署项目 server.xml 配置
xml
复制代码
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<!--线程池-->
<Executor
name="myThreadPool"
namePrefix="catalina-exec-"
maxThreads="200"
minSpareThreads="10"/>
<!--连接池-->
<Connector port="9999"
protocol="HTTP/1.1"
acceptCount="200"
connectionTimeout="20000"
executor = "myThreadPool"
disableUploadTimeout="true"
redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
<Context path="/expert" docBase="expert" debug="0" reloadable="false"></Context>
</Server>
tomcat使用Acceptor线程专门负责从Accept队列中取出connection,接受该connection,然后交给工作线程去处理(读取请求参数、处理逻辑、返回响应等等);
如果该连接不是keep alived的话,则关闭该连接,然后该工作线程释放回线程池,
如果是keep alived的话,则等待下一个数据包的到来直到keepAliveTimeout,然后关闭该连接释放回线程池;
然后Acceptor线程接着去accept队列取connection;
1. Tomcat能处理的最大请求数由maxConnections和acceptCount决定;
Executor
properties
复制代码
###线程池,这些属性也可直接配置到连接池(Connector), 优先使用Executor;
# 连接器同一个时刻最大的工作线程数,可以处理的最大并发请求数(tomcat真正并发数)
# maxThreads数量应该远大于CPU核心数量(不宜过大,否则cpu切换线程时间偏大);
# 线程数的经验值为:1核2g -- 200;4核8g ------ 800。
maxThreads="200"
# 最小空闲线程数,预先创建,默认10;
# maxThreads/10 左右;
minSpareThreads="10"
#maxSpareThreads="50"
# 早期的tomcat 5.0之前的配置
# minProcessors="5"
# maxProcessors="300"
Connector
properties
复制代码
# http端口,默认8080
port="8080"
# 使用何种方式来接受和处理client端请求, def "HTTP/1.1", ["AJP/1.3"]
protocol="HTTP/1.1"
###连接池
# 已建立的可处理连接队列数,可无空闲处理线程时,请求队列(排队)最大长度,超出请求会被拒绝处理,默认100;
# 当前同时连接数超过maxConnections的时候,还可接受的连接数;
# 一般是设置跟 max-threads 一样大;
acceptCount="200"
# http连接超时,当client与tomcat建立连接,"cto"时间后,仍然没有得到client的请求数据,此时连接将会被断开, 默认60000, -1无超时,(Tomcat的标准server.xml中,设置为20000);
connectionTimeout="20000"
# 表示最多可以有多少个socket连接到tomcat上,Acceptor能同时接受的最大连接数,超出时,服务器将接收一个连接但是不处理(被阻塞),NIO的默认值是10000,APR/native的默认值是8192,而BIO的默认值为maxThreads;
max-connections="10000"
# 容许Servlet容器,正在执行使用一个较长的链接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false
disableUploadTimeout="true"
# https端口
redirectPort="8443"
############ 可忽略属性 #########
# 默认2M,小于0没有限制应该被强制执行;
max-swallow-size
# http请求中header的最大个数,默认100,"-1"表示不限制;
maxHeaderCount
# http-get请求中允许传递的查询字符串的最大个数,默认10000,"-1"表示无限制;
maxParameterCount
# http-post请求中数据(body)的最大尺寸,单位:byte,默认2M;
maxPostSize
# http-get请求中,使用何种字符集对查询字符串进行编码,默认"iso-8859-1",["UTF-8"];
URIEncoding
# 是否对http相应数据启用Gzip压缩,可选值为"off"或者"on";
compression
查看Tomcat版本:
1. 打开tomcat路径下的lib文件夹,找到catalina.jar 用解压工具打开,找到:MANIFEST.MF;
2. cmd, 进入tomcat路径bin目录(若配置了环境变量可忽略),输入catalina + enter, 再输入version + enter;