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>

十、注意事项

  1. 端口冲突:启动前确认 8005(shutdown)、8081(HTTP)等端口未被占用
  2. 备份:升级前务必备份旧版本
  3. G1GC 与 CMS 冲突:两者不能同时使用,当前配置以 G1GC 为准
  4. dump 目录:确保 /data/dump/directory/ 存在
  5. 权限:确保 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  # 临时关闭防火墙测试
posted @ 2026-05-14 17:32  RK5123153  阅读(11)  评论(0)    收藏  举报