正确设置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 控制,二者需协同。
- 启用共享线程池更可控:在
<service></service>内顶部添加 <executor name="tomcatThreadPool" nameprefix="catalina-exec-" maxthreads="500" minsparethreads="50" prestartminsparethreads="true"></executor>- 对应 HTTP Connector 改为:
<connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectiontimeout="30000" keepalivetimeout="15000" acceptcount="500"></connector> - 说明:
•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></pid>,查看输出是否含你设置的-Xms/-Xmx - 避免错误:
• 在catalina.sh中误写成CATALINA_OPTS(它只影响 Tomcat 自身启动参数,不影响 JVM)
• 混用单引号和双引号导致变量未展开(如JAVA_OPTS='...$JAVA_HOME...'会失效)
• 忘记chmod +x catalina.sh导致权限问题(极少见但存在)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











