赞
踩
<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决定;
###线程池,这些属性也可直接配置到连接池(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"
# 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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。