Tomcat参数配置相关
by:授客 QQ:1033553122
目的:
对Tomcat配置的点滴学习总结,主要目的在于分析Tomcat与性能相关的一些参数设置,以便性能调优时选择最优配置
环境:
Server version: Apache Tomcat/9.0.0.M1
Java8
配置文件说明
1. server.xml
<?xml version='1.0' encoding='utf-8'?>
<!--connectors可使用一个共享的executor(执行器),可定义一个、多个命名的线程池-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
主要属性说明:
name:供server.xml中其它位置引用。Name必填且唯一。
namePrefix:为每个由executor线程创建的线程的名称前缀。单个线程的线程名称为namePrefix+threadNumber
maxThreads:线程池中活动线程的最大数量,默认200
minSpareThreads:始终打开的最小不活跃线程数,默认是25。(The minimum number of threads always kept alive, default is 25)
maxIdleTime:设置超过多久关闭空闲线程(idle thread),默认值60000ms(1分钟)。仅在活动线程数超过minSpareThreads时才会关闭空闲线程。
maxQueueSize:排队等待执行的最大可执行任务数。默认值为Integer.MAX_VALUE。超过该值则拒绝新的任务
prestartminSpareThreads:是否在开启执行器Executor时,就生成minSpareThreads个线程,默认false。(WhetherminSpareThreads should be started when starting the Executor or not)
threadRenewalDelay:如果配置了ThreadLocalLeakPreventionListener,将通知该执行器context已停止相关信息。在停止context后,将在线程池重建线程。为了避免同一时间重建所有线程,该选项在设置了每两次重建线程的时间间隔。单位ms,默认值1000ms。如果值为负数,不重新新建线程。
<!-- "Connector" 代表了请求接收端和响应返回端(A "Connector" represents an endpoint by which requests are received)。以下在端口8080,定义了一个非SSL/TLS HTTP/1.1的连接器
-->
参考连接:http://tomcat.apache.org/tomcat-9.0-doc/config/executor.html
<!-- 配置"Connector"使用的共享线程池-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="50"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/plain,application/x-javascript,text/css,
text/javascript,application/json"
/>
-->
主要属性说明(针对HTTP/1.1):
executor:指定Executor的名称。如果Executor存在,那么connector(连接器)将使用该执行器,并且所有其它的线程属性都会被忽略。注意,如果没有为连接器指定共享执行器,那么连接器将使用一个内部私有的,执行器来提供线程池。
port:Connector用于监听新连接请求并创建服务端socket的TCP端口。操作系统仅允许一个服务端应用在同一个指定IP上监听指定端口。如果设置port值为0,那么Tomcat将为该连接器随机查询一个空闲端口。
protocol:设置协议。默认HTTP/1.1
connectionTimeout:设置Connector等待连接超时时间,单位毫秒。设置-1,则表示无限等待。默认值60000,即60分钟,但是Tomcat会把标准server.xml设置为2000。除非disableUploadTimeout设置为false,否则,该超时时间也会用于读取请求体的超时时间(如果有必要的话)
redirectPort:如果Connector支持非SSL请求,且收到一个匹配 <security-constraint>约束,要求SSL传输的请求,那么,Catalina会自动把请求重定向到这个指定的端口。
注:以下字段在默认配置中未体现
compression:Connector可能使用HTTP/1.1 GZIP压缩,以减少服务器带宽。可选值:off|on|force|整数,off-禁用压缩,on-开启压缩,这会导致text文本数据被要锁, force-所有情况下都进行压缩,整数-等同on,不同的是指定了最少压缩数据量,即数据大小超过指定数量的数据才进行压缩。如果content-length未知,且compression 设置为"on"或者其它非off值,将会压缩请求输出,即请求体。如果不指定,属性将被设置为off。
注意: 在使用compression(节约带宽)和使用sendfile功能(节约cpu)之间有个权衡,如果connector支持sendfile功能,比如NIO connector,那么将优先使用sendfile,结果是超过48k的静态文件将不压缩直接发送。可通过设置connector的useSendfile 属性值来关闭sendfile。或者在 DefaultServlet默认conf/web.xml、web应用的web.xml中修改sendfile阈值配置。
compressionMinSize:如果compression设置为on,该属性用于指定最小起压数据量,即超过compressionMinSize指定值才进行压缩。 默认值 "2048"。
noCompressionUserAgents:该值为正则表达式(使用java.util.regex),匹配http客户端user-agent头,如果匹配则不使用compression,也就是说设置哪些客户端发出的请求不做压缩处理。因为一些客户端自身已经实现了这个功能。参考网络资料,通常设置为"gozilla, traviata"。默认值为空字符串(禁用正则表达式匹配)
compressableMimeType:设置使用那种HTTP压缩,逗号分隔。默认值为text/html,text/xml,text/plain,text/css,text/javascript,application/javascript。
acceptCount:当所有可能用于处理请求的线程都在使用中时,进到服务器的连接请求的最大队列长度。当请求队列已满时,接受到的任意请求都被拒绝。最大请求队列长度值默认: 100。
maxThreads:由Connector创建的用于处理请求的最大线程数,这决定了同时可以处理的最大请求数。默认的,该值为200.如果该connector和某个executor相关联,那么connector将忽略该属性,并使用executor的执行任务,而非采用内部线程的。
更多资料,参考连接:http://tomcat.apache.org/tomcat-9.0-doc/config/http.html
2. web.xml
<!-- ==================== 默认的会话配置================= -->
<!-- 可以通过修改以下的值来为所有新建的会话设置默认的会话超时时间,单位 分钟-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3. 内存配置
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入
JAVA_OPTS="-Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入
set JAVA_OPTS=-Xms512m -Xmx1024m
注意:内存配置做法来自网络资料,未验证