针对 Tomcat 9 的优化,你提供的配置已经抓住了核心(线程池与 I/O 协议),但在实际生产环境下,还可以进一步精细化。
以下是一套完整的 Tomcat 9 优化方案,涵盖了 Server 级配置、JVM 参数以及运行环境建议。
一、 server.xml 深度优化
1. 禁用 Shutdown 端口
正如你所提,将端口设为 -1 可以防止通过 Telnet 远程关闭 Tomcat,同时减少一个监听端口。
<Server port="-1" shutdown="SHUTDOWN">
2. 执行器(线程池)优化
maxThreads 设为 800 适合中高并发,但需要确保服务器内存和 CPU 足以支撑线程切换的开销。
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="100"
maxQueueSize="100"
prestartminSpareThreads="true"/>
- 注意:
maxQueueSize设为 100 意味着队列很短,超过 100 后会立即创建新线程直到 800。如果业务是计算密集型,建议调小maxThreads;如果是 I/O 密集型,800 是合理的。
3. Connector 优化 (使用 NIO2)
你选择了 Http11Nio2Protocol,这是 Tomcat 9 处理高并发异步 I/O 的最佳选择。
<Connector executor="tomcatThreadPool"
port="8096"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
maxConnections="10000"
acceptCount="200"
acceptorThreadCount="2"
enableLookups="false"
URIEncoding="UTF-8"
maxPostSize="10485760"
disableUploadTimeout="true"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,application/javascript,application/json"
SSLEnabled="false"/>
- 优化项补充:
- acceptCount: 建议调至 200。当所有线程都在工作且队列满时,允许排队的 TCP 连接数。
- compression: 开启 Gzip 压缩,可以显著减少网络传输带宽,提升前端响应速度。
二、 bin/catalina.sh (JVM 优化)
这是提升 Tomcat 效率最明显的地方。建议使用 G1 垃圾回收器(当前主流生产环境的首选)。
在 bin/catalina.sh 的第一行添加如下配置(假设内存为 8G,请根据实际情况调整):
# ----- JVM Optimization Start -----
JAVA_OPTS="$JAVA_OPTS -server -Xms4g -Xmx4g -Xss512k"
# 开启 G1 回收器
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2"
# 内存溢出自动堆转储
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/java_heapdump.hprof"
# GC 日志配置
JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:file=../logs/gc.log:time,level,tags:filecount=10,filesize=10M"
# ----- JVM Optimization End -----
参数详解:
- -Xms / -Xmx: 建议设为一致,避免 JVM 频繁动态调整堆大小导致的性能抖动。
- -XX:+UseG1GC: 适用于大内存(4G以上),能有效控制停顿时间。
- **-Xlog:gc***: 这是 Java 9+ 的新语法,Tomcat 9 通常运行在 Java 11 或 17 上,使用该语法可以获得更详尽的日志。
三、 其他生产环境建议
- 移除默认应用:
删除
webapps目录下的ROOT,examples,docs,manager,host-manager等文件夹,减少扫描开销并提高安全性。 - 静态资源分离: 尽量使用 Nginx 动静分离。Tomcat 处理静态资源(图片、JS/CSS)的效率远不如 Nginx。
- 操作系统优化:
调高 Linux 系统的文件句柄限制(ulimit)。
# 在 /etc/security/limits.conf 添加
- soft nofile 65535
- hard nofile 65535
---
**你想让我根据你服务器的具体配置(CPU 核数和内存大小)重新计算一套更精确的数值吗?** 猜你喜欢
发表评论
电子邮件地址不会被公开。 必填项已用*标注