一台服务器如何运行多个Tomcat?多Tomcat实例在单服务器上的部署与运行技巧

你有没有经历过这种抓狂时刻——公司新项目急着上线,但老项目的Tomcat *** 活不让端口?去年某电商团队就栽在这坑里:促销活动当天,新旧系统端口冲突直接导致服务器瘫痪!其实解决之道很简单:​​一台服务器完全能当多个Tomcat的房东​​。今天手把手教你当"包租公",让不同Tomcat和平共处不打架!


一、为什么非得挤一台服务器?

​▌ 省钱的硬道理​

  • 单独买服务器?每台成本1万+
  • ​共享主机​​:多个Tomcat挤一台 → 硬件成本直降80%

​▌ 运维不用跑断腿​
想象这个场景:

  • 传统模式:5台服务器 → 要查日志得跑5个机房
  • ​多实例部署​​:所有Tomcat集中管理 → 故障排查效率翻倍

​▌ 版本自由切换​
某金融公司踩过的雷:

  • 老系统只兼容Tomcat7 → 强行升级到Tomcat9?核心功能全崩!
  • ​多实例方案​​:
     - 项目A用Tomcat7(端口8081)
     - 项目B用Tomcat9(端口8082)
     → ​​两套系统并行无冲突​

二、新手三步搞定双Tomcat

▎第一步:解压时就要留后路

​致命错误​​:直接解压到默认路径
​正确操作​​:

bash复制
# 创建专用目录mkdir /home/tomcat_project1mkdir /home/tomcat_project2# 解压到不同路径tar -zxvf apache-tomcat-9.0.1.tar.gz -C /home/tomcat_project1tar -zxvf apache-tomcat-10.0.1.tar.gz -C /home/tomcat_project2

重点:路径千万别带空格和中文!新手最容易栽在这

▎第二步:改端口像换门牌号

​必须修改的三处端口​​(以第二个Tomcat为例):

  1. ​HTTP服务门牌​​(默认8080)→ 改成8090
  2. ​关停服务暗号​​(默认8005)→ 改成8006
  3. ​AJP协议通道​​(默认8009)→ 改成8010

操作指南:

xml复制
<Connector port="8090" protocol="HTTP/1.1" ... /><Server port="8006" shutdown="SHUTDOWN" ... ><Connector port="8010" protocol="AJP/1.3" ... />

​血泪教训​​:某程序员漏改8005端口 → 关停命令同时杀 *** 两个Tomcat

▎第三步:给每个Tomcat发"身份证"

​环境变量配置秘笈​​:

bash复制
# 在/etc/profile末尾添加export CATALINA_HOME_1=/home/tomcat_project1export CATALINA_BASE_1=/home/tomcat_project1export CATALINA_HOME_2=/home/tomcat_project2export CATALINA_BASE_2=/home/tomcat_project2

执行source /etc/profile激活配置 → 否则修改白干!


三、90%新手会踩的三大坑

​▌ 内存争夺战​
典型报错:java.lang.OutOfMemoryError
​避坑方案​​:

  • Tomcat1配置:
bash复制
# catalina.sh中添加JAVA_OPTS="-Xms512m -Xmx1024m"
  • Tomcat2配置:
bash复制
JAVA_OPTS="-Xms256m -Xmx512m"

总内存必须小于服务器物理内存!4G服务器别开两个1.5G实例

​▌ 日志互相覆盖​
​灾难现场​​:两个Tomcat日志混在同一个logs文件夹
​救命操作​​:

bash复制
# 修改catalina.shexport CATALINA_OUT="$CATALINA_BASE/logs/catalina.out"

→ 自动按实例路径生成独立日志

​▌ 开机自启动陷阱​
错误做法:直接复制启动脚本
正确姿势:

bash复制
# 为每个实例创建独立服务cp tomcat1/bin/catalina.sh /etc/init.d/tomcat1sed -i 's/CATALINA_HOME/CATALINA_HOME_1/g' /etc/init.d/tomcat1

→ 否则所有实例都启动到同一个路径


四、企业级方案:集群部署

当访问量突破5000/秒,就得用这招:

​方案​适用场景成本实施难度
端口区分开发测试环境¥0
Docker容器化中型线上系统¥2000/月⭐⭐
负载均衡集群电商/直播平台¥5万+⭐⭐⭐

​集群配置核心代码​​:

xml复制
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"><Channel className="org.apache.catalina.tribes.group.GroupChannel"><Membership className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"/>Channel>Cluster>

→ 实现会话同步,用户跳转节点不丢数据


​小编拍板​​:2025年容器化部署成本将降40%,但现阶段​​中小项目用端口区分最实在​​——把改端口练熟,比折腾docker省下三天加班时间!当Tomcat11支持自动端口避让时,那些背熟端口号的老运维怕要哭晕在机房...

你的Tomcat打架了吗?欢迎留言报错日志~ 前30位送《端口冲突检测工具包@epace02

: [1]
: [2]
: [3]
: [4]
: [5]
: [7]
: [9]
: [10]