Tomcat作为广泛使用的Java Web应用服务器,其性能直接影响着Web应用的响应速度和并发处理能力。合理的调优可以使Tomcat在相同的硬件条件下支持更高的并发量,降低响应时间,提高系统稳定性。
在深入调优之前,有必要了解Tomcat的核心组件及其对性能的影响:
# 在catalina.sh或catalina.bat中设置JVM参数
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump"
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="50"
acceptCount="300"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
URIEncoding="UTF-8"/>
协议选择:
关键参数:
maxThreads
:最大工作线程数(默认200),根据CPU核心数和应用类型调整minSpareThreads
:最小空闲线程数(默认10)acceptCount
:等待队列长度,当所有线程忙时新请求的等待队列大小connectionTimeout
:连接超时时间(毫秒)enableLookups
:禁用DNS查询提高性能<Connector ...
socket.directBuffer="false"
socket.appReadBufSize="8192"
socket.appWriteBufSize="8192"
socket.bufferPool="500"
socket.processorCache="500"
socket.keyCache="500"
socket.eventCache="500"/>
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="true"/>
然后在Connector中引用:
<Connector executor="tomcatThreadPool" ... />
prestartminSpareThreads
避免初次请求延迟maxQueueSize
控制积压请求量
<Context>
<Manager className="org.apache.catalina.session.StandardManager"
maxInactiveInterval="1800" />
Context>
<Connector ...
sendfile="true"
sendfileSize="1024"/>
<Context>
<Resources cachingAllowed="true"
cacheMaxSize="102400"
cacheObjectMaxSize="5120"
cacheTtl="60000"/>
Context>
<Connector ...
disableUploadTimeout="true"
enableLookups="false"/>
<Connector ...
maxPostSize="4194304"
maxHttpHeaderSize="8192"/>
<Context reloadable="false">
Context>
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
启用manager应用,监控线程使用情况、会话数等关键指标
maxThreads
和acceptCount
通过以上全面的Tomcat调优措施,可以显著提升Web应用的性能和稳定性。但需要注意,调优是一个持续的过程,需要根据实际应用特点和负载变化不断调整优化。