正确设置CATALINA_HOME指向Tomcat根目录并配置JAVA_OPTS(非CATALINA_OPTS)于catalina.sh开头,结合server.xml中Executor与Connector调优,可保障Tomcat稳定高效运行。

Linux 下配置 CATALINA_HOME 和 JAVA_OPTS 是 Tomcat 稳定高效运行的基础,关键在于环境变量设置准确、JVM 参数合理、且与系统资源匹配。
正确设置 CATALINA_HOME 环境变量
该变量指向 Tomcat 安装根目录,所有脚本(如 startup.sh、shutdown.sh)依赖它定位配置和类库。
- 推荐方式:在 /etc/profile.d/tomcat.sh 中统一定义(对所有用户生效)
- 内容示例:
export CATALINA_HOME=/opt/apache-tomcat-9.0.85<br>export PATH=$PATH:$CATALINA_HOME/bin
- 执行
source /etc/profile.d/tomcat.sh生效,验证用echo $CATALINA_HOME - 避免直接改
/etc/profile或用户级~/.bashrc,不利于多实例管理
在 catalina.sh 中配置 JAVA_OPTS(非 CATALINA_OPTS)
Tomcat 启动时真正读取的是 JAVA_OPTS(不是 CATALINA_OPTS),必须写在 catalina.sh 文件最开头的可执行语句之前,否则会被覆盖。
- 编辑
$CATALINA_HOME/bin/catalina.sh,在第 1 行或注释块后立即添加: JAVA_OPTS="-server -Xms2g -Xmx2g -XX:+UseG1GC -Duser.timezone=Asia/Shanghai -Djava.awt.headless=true"- 注意:
• Java 8+ 已废弃-XX:PermSize/MaxPermSize,改用-XX:MetaspaceSize和-XX:MaxMetaspaceSize
•-Xms与-Xmx建议设为相同值,避免运行中扩容抖动
• 堆内存建议不超过物理内存的 75%,留足给 OS 和 native 内存
结合 server.xml 调整 Connector 并发能力
JAVA_OPTS 解决 JVM 层资源,而并发处理由 server.xml 中的 Connector 控制,二者需协同。
立即学习“Java免费学习笔记(深入)”;
- 启用共享线程池更可控:在
<Service>内顶部添加 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" />- 对应 HTTP Connector 改为:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="30000" keepAliveTimeout="15000" acceptCount="500" /> - 说明:
•acceptCount不是并发数,而是等待队列长度,过高会掩盖真实瓶颈
•protocol推荐 NIO2(Tomcat 8.5+)或 APR(需安装 native 库),比默认 BIO 更高效
验证与常见避坑点
参数改完不验证等于没调,几个关键检查动作不能少。
- 启动后检查日志:
grep "Starting ProtocolHandler" $CATALINA_HOME/logs/catalina.out,确认端口和协议加载正常 - 确认 JVM 参数生效:
jps -l找到 Tomcat 进程 PID,再执行jinfo -flags <pid>,查看输出是否含你设置的-Xms/-Xmx - 避免错误:
• 在catalina.sh中误写成CATALINA_OPTS(它只影响 Tomcat 自身启动参数,不影响 JVM)
• 混用单引号和双引号导致变量未展开(如JAVA_OPTS='...$JAVA_HOME...'会失效)
• 忘记chmod +x catalina.sh导致权限问题(极少见但存在)


















