Catalina是Tomcat架构中的Servlet容器,负责加载和管理Web应用。Tomcat的启动脚本catalina.sh和catalina.bat正是以它命名的,日常所说的Catalina配置,通常就是指通过这些脚本以及server.xml等文件对Tomcat运行参数进行调整。本文将从配置体系、常用参数、实战示例和常见错误四个方面,带你系统掌握Catalina配置。

一、Catalina配置体系概览
Tomcat的配置文件集中在conf目录下,其中与Catalina最相关的有三个:server.xml是主配置文件,定义了连接器、端口、虚拟主机等核心组件;catalina.properties管理类加载路径和系统属性;而启动脚本catalina.sh(Linux)和catalina.bat(Windows)则负责在启动前设置环境变量,尤其是JVM参数。
需要特别理解的一点是,catalina.sh脚本本身并不直接写死JVM参数,它会优先读取环境变量JAVA_OPTS和CATALINA_OPTS。因此对JVM做调优时,推荐的做法是在bin目录下创建setenv.sh(Windows为setenv.bat)文件,把自定义参数写进去,catalina.sh启动时会自动加载它。这样升级Tomcat时无需改动官方脚本,配置也不会丢失。
二、核心配置项详解与示例
1. JVM内存参数配置
JAVA_OPTS对所有命令(start、stop、run)都生效,而CATALINA_OPTS只对启动相关的命令生效。由于关闭Tomcat时并不需要堆内存配置,一般建议堆参数写在CATALINA_OPTS中,编码、时区等通用参数写在JAVA_OPTS中。示例如下:
#!/bin/sh # setenv.sh 放在 Tomcat 的 bin 目录下 JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai" CATALINA_OPTS="$CATALINA_OPTS -Xms2g -Xmx2g -Xmn1g \ -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/dump/" export JAVA_OPTS CATALINA_OPTS
其中-Xms与-Xmx建议设置成相同值,避免运行期动态扩容带来的抖动。Metaspace相关的两个参数在频繁热部署的场景下尤为重要,默认值偏小会导致多次重部署后抛出OutOfMemoryError。
2. server.xml中的Connector配置
Connector决定Tomcat如何接收请求,最常用的属性包括port(监听端口)、protocol(协议类型)、maxConnections(最大连接数)、maxThreads(工作线程数)以及URIEncoding(URL解码字符集)。一个生产可用的配置示例:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="500"
minSpareThreads="20"
maxConnections="10000"
acceptCount="100"
URIEncoding="UTF-8"
compression="on"
compressibleMimeType="text/html,text/xml,text/css,application/javascript"
redirectPort="8443" />maxThreads并非越大越好,默认200对大多数应用已经足够。线程数设置过高会加剧上下文切换,反而降低吞吐。一般按照公式线程数约等于CPU核心数乘以(1加等待时间与计算时间的比值)来估算,再结合压测结果微调。
3. 远程调试与管理端口
开发环境经常需要远程调试Tomcat中的应用,只需在setenv.sh中追加调试参数:
CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
然后在IDE中创建Remote调试配置,填入服务器IP和5005端口即可。注意Tomcat 9及以上版本出于安全考虑,address=5005默认只监听回环地址,如需外部机器连接要写成address=*:5005,且仅在可信网络环境下使用。另外server.xml中的Server端口(默认8005)用于接收SHUTDOWN命令,生产环境务必确认该端口未被恶意访问,必要时修改默认的SHUTDOWN字符串。
三、常见错误与解决方法
错误一:启动时报内存溢出
典型堆栈包含OutOfMemoryError: Java heap space或PermGen space / Metaspace。原因多半是堆或元空间设置过小,或者存在内存泄漏。解决步骤:先通过HeapDumpPath生成的dump文件用MAT等工具分析泄漏点;若只是内存确实不足,则调大-Xmx或-XX:MaxMetaspaceSize,同时确认服务器物理内存是否支撑得起配置值。
错误二:端口被占用导致启动失败
日志中出现BindException: Address already in use,说明8080、8005或8443端口被占用。Linux下可用netstat -tlnp | grep 8080或ss -tlnp定位占用进程,Windows下使用netstat -ano | findstr 8080查到PID后在任务管理器结束进程,或者直接修改server.xml中的port换一个端口。另一个隐蔽的情况是Server端口(8005)被占用时Tomcat能启动但无法正常关闭,容易造成僵尸进程,排查时不要忽略它。
错误三:GET请求中文参数乱码
从Tomcat 8开始,Connector的默认解码字符集已经是UTF-8,但如果是老版本Tomcat或者前端使用ISO-8859-1编码的场景,仍会出现乱码。解决办法是在Connector节点上显式添加URIEncoding="UTF-8";POST乱码则通过在应用的web.xml中配置CharacterEncodingFilter,设置encoding为UTF-8并强制request和response编码来解决。
错误四:Windows下startup.bat闪退
双击startup.bat窗口一闪而过,多半是JAVA_HOME未配置或指向的路径不正确。可在命令行直接运行catalina.bat run,让错误信息停留在窗口中。此外还要检查CATALINA_HOME是否设置、路径中是否包含中文或空格、JDK版本是否与Tomcat版本匹配,例如Tomcat 10要求JDK 11及以上,用JDK 8启动会直接报版本不支持错误。
四、配置管理的几点建议
首先,坚持用setenv脚本管理自定义参数,保持官方脚本原样,方便升级和排障。其次,任何参数改动都要先在测试环境验证,尤其是maxThreads、maxConnections这类直接影响并发的配置,最好配合JMeter压测观察吞吐和响应时间的变化。最后,养成看日志的习惯,catalina.out和logs目录下按日期滚动的日志文件是定位启动失败、内存问题最直接的依据,遇到问题先读日志往往比盲目搜索更快。
Tomcat Catalina配置catalina.shserver.xml修改时间:2026-09-02 02:12:31