首页 > 后端 > 正文

tomcat9 针对 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 上,使用该语法可以获得更详尽的日志。

三、 其他生产环境建议

  1. 移除默认应用: 删除 webapps 目录下的 ROOT, examples, docs, manager, host-manager 等文件夹,减少扫描开销并提高安全性。
  2. 静态资源分离: 尽量使用 Nginx 动静分离。Tomcat 处理静态资源(图片、JS/CSS)的效率远不如 Nginx。
  3. 操作系统优化: 调高 Linux 系统的文件句柄限制(ulimit)。
    
    # 在 /etc/security/limits.conf 添加
  • soft nofile 65535
  • hard nofile 65535


---

**你想让我根据你服务器的具体配置(CPU 核数和内存大小)重新计算一套更精确的数值吗?**

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息
picture loss