Tomcat 版本升级操作手册
环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Linux (CentOS 7) |
| JDK 版本 | 1.8.0_202 |
| JDK 路径 | /data/jdk1.8.0_202 |
| Tomcat 目标版本 | 9.0.109 |
| 应用部署路径 | /data/tomcat/webapps/ROOT |
一、备份旧版本 Tomcat
[!WARNING]
⚠️ 重要提醒:停止 Tomcat 前务必提前告知客户,确认无重要业务在跑或已安排停机窗口!
1.1 停止 Tomcat
# 关闭 Tomcat
/data/tomcat/bin/shutdown.sh
# 确认进程已停止
ps -ef | grep tomcat
# 如果还有进程,运行强制杀掉
kill -9 <PID>
1.2 执行备份
# 查看当前 Tomcat 目录结构
ls -la /data/
# 第1步:使用 cp 复制备份(带日期)
cp -r /data/tomcat /data/tomcat20260514
# 第2步:使用 mv 将原目录改名为 tomcat_old
mv /data/tomcat /data/tomcat_old
注意:如果 tomcat20260514 目录已存在,会被覆盖
二、下载或上传新版本 Tomcat
方式一:在线下载(推荐)
cd /data
# 下载 Tomcat 9.0.109
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.109/bin/apache-tomcat-9.0.109.tar.gz
# 如果 wget 不可用,使用 curl
curl -O https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.109/bin/apache-tomcat-9.0.109.tar.gz
方式二:无法下载时使用上传
如果目标服务器无法访问外网,需要先在本地下载,再通过 scp 上传:
1. 本地电脑下载:
下载地址:https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.109/bin/apache-tomcat-9.0.109.tar.gz
2. 上传到服务器:
# 从本地上传到服务器(在新开一个本地终端执行)
scp D:\SystemFiles\桌面\apache-tomcat-9.0.109.tar.gz root@目标服务器IP:/data/
3. 确认上传成功:
ls -la /data/apache-tomcat-9.0.109.tar.gz
三、解压并部署
# 解压
tar -zxvf apache-tomcat-9.0.109.tar.gz
# 重命名目录
mv apache-tomcat-9.0.109 tomcat
四、复制原有配置和依赖
# 复制 server.xml(端口和连接器配置)
cp /data/tomcat_old/conf/server.xml /data/tomcat/conf/server.xml
# 复制 setenv.sh(JVM 参数配置)
cp /data/tomcat_old/bin/setenv.sh /data/tomcat/bin/setenv.sh
# 复制 webapps 目录(应用)
rm -rf /data/tomcat/webapps/*
cp -r /data/tomcat_old/webapps/ROOT /data/tomcat/webapps/
# 复制 logs 目录(如需保留日志)
rm -rf /data/tomcat/logs/*
cp -r /data/tomcat_old/logs/* /data/tomcat/logs/
# 复制 work 目录(如需保留缓存)
rm -rf /data/tomcat/work/*
cp -r /data/tomcat_old/work/* /data/tomcat/work/
# 复制 temp 目录(如无特殊需求可跳过,重启后会重新生成)
# rm -rf /data/tomcat/temp/*
# cp -r /data/tomcat_old/temp/* /data/tomcat/temp/
五、(可选)手动调整 JVM 参数
如果第四步已从旧版本复制 setenv.sh,则跳过此步骤。
只有在新部署或需要调整参数时才需要执行。
⚠️ 以下参数为示例,实际参数值需根据客户要求或服务器资源配置进行调整。
5.1 创建 HeapDump 目录
当 JVM 发生 OutOfMemoryError 时,会自动生成堆转储文件(heap dump)到指定目录,便于排查问题。
mkdir -p /data/dump/directory/
# 编辑 setenv.sh
vi /data/tomcat/bin/setenv.sh
写入以下内容:
JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError \
-XX:+UseG1GC \
-XX:+CMSParallelRemarkEnabled \
-XX:+CMSClassUnloadingEnabled \
-XX:MaxRAMPercentage=75.0 \
-XX:InitialRAMPercentage=25.0 \
-Xmn2048m \
-XX:MetaspaceSize=512m \
-XX:HeapDumpPath=/data/dump/directory/ \
-XX:MaxMetaspaceSize=1024m \
-Duser.timezone=GMT+08"
export JAVA_OPTS
# 创建 dump 目录
mkdir -p /data/dump/directory/
# 添加执行权限
chmod +x /data/tomcat/bin/setenv.sh
注意:UseG1GC 和 CMS 参数冲突,二选一即可。当前配置以 G1GC 为准。
六、(可选)手动调整 Server.xml
如果第四步已从旧版本复制 server.xml,则跳过此步骤。
只有在新部署或需要调整配置时才需要执行。
⚠️ 以下配置为示例,实际配置值需根据客户要求或服务器资源配置进行调整。
vi /data/tomcat/conf/server.xml
修改 HTTP Connector 配置:
<Connector port="8081"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
enableLookups="false"
acceptCount="100"
URIEncoding="UTF-8"
maxConnections="200"
maxPostSize="52428800"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,image/jpeg,image/gif,application/javascript"/>
七、启动 Tomcat
# 先关闭可能存在的旧进程
ps -ef | grep tomcat
# 如果有旧进程,用 kill 命令杀掉
# 启动新版本
/data/tomcat/bin/startup.sh
八、验证
查看启动日志
tail -f /data/tomcat/logs/catalina.out
检查进程
ps -ef | grep tomcat
访问测试
curl http://localhost:8081
查看 Tomcat 版本
/data/tomcat/bin/catalina.sh version
九、常用命令
# 启动
/data/tomcat/bin/startup.sh
# 关闭
/data/tomcat/bin/shutdown.sh
# 强制杀掉进程
kill -9 <PID>
# 查看端口占用
netstat -tlnp | grep 8081
# 查看 JVM 参数
jinfo -flags <PID>
十、注意事项
- 端口冲突:启动前确认 8005(shutdown)、8081(HTTP)等端口未被占用
- 备份:升级前务必备份旧版本
- G1GC 与 CMS 冲突:两者不能同时使用,当前配置以 G1GC 为准
- dump 目录:确保
/data/dump/directory/存在 - 权限:确保
setenv.sh有执行权限
十一、常见问题
Q: 启动报错 "Address already in use"
A: 端口被占用,先用 kill 杀掉旧进程
Q: JVM 参数没有生效
A: 检查 setenv.sh 是否有 Windows 回车符,用 cat -A setenv.sh 查看
Q: curl 测试连接被拒绝
A: 检查防火墙是否开放端口
systemctl stop firewalld # 临时关闭防火墙测试

浙公网安备 33010602011771号