实用指南:Tomcat核心架构与生产部署指南
一、Tomcat核心架构与工作原理
核心组件
Server:顶层容器,管理所有Service实例,监听8005端口(shutdown命令)
Service:包含Connector(接收请求)和Engine(处理请求)的组合,支持多协议集成
Connector:分HTTP/1.1(8080端口)和AJP(8009端口),负责将字节流转换为ServletRequest对象
Container:分Engine→Host→Context→Wrapper四级,逐层解析请求
工作流程

二、零基础部署指南(生产环境配置)
1. 环境准备
1.1 jdk25介绍:
https://www.cnblogs.com/javastack/p/19097137
可用的 OpenJDK JDK 版本(按版本号排序):
| 版本 | 状态 | 说明 |
|---|---|---|
OpenJDK 8 | 可用 | 兼容旧系统 |
OpenJDK 11 | 可用 | 兼容旧系统 |
OpenJDK 17 | 可用 | 企业稳定环境(已有系统) |
OpenJDK 21 | 可用 | LTS(2023 年发布),功能较新,企业稳定环境、长期维护 |
OpenJDK 25 | 可用 | 最新LTS,(2025年9月16日发布),功能最新 新项目、长期维护 |
1.2 Alibaba Dragonwell JDK 介绍:
https://help.aliyun.com/zh/ecs/user-guide/deploy-alibaba-dragonwell-jdk#695822a319ejn
1.3tomcat11 介绍
https://tomcat.apache.org/tomcat-11.0-doc/index.html
1.4 环境搭建
# 1 JDK安装(必须Java 8+)
# 1.1apt源更新
apt update
apt list -a openjdk-*-jdk
# 1.2 安装以及核实版本
apt install openjdk-25-jdk -y
java --version
# 1.3 设置JAVA_HOME
readlink -f $(which java) | sed "s:bin/java::"
echo "export JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64" | sudo tee -a /etc/environme
nt
export JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64
source /etc/environment
echo $JAVA_HOME
# 1.4 Tomcat安装(以Linux为例)
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.13/bin/apache-tomcat-11.0.13.tar.gz
tar zxvf apache-tomcat-11.0.13.tar.gz -C /opt
ln -s /opt/apache-tomcat-11.0.13 /opt/tomcat
# 1.5 创建专用用户并设置权限
root@D-3PGMZJ3-0948:/opt/tomcat# useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
useradd: warning: the home directory /opt/tomcat already exists.
useradd: Not copying any file from skel directory into it.
chown -R tomcat:tomcat /opt/tomcat
chown -R tomcat:tomcat /opt/apache-tomcat-11.0.13
chmod -R 750 /opt/apache-tomcat-11.0.13
# 1.6 配置 systemd 服务(便于管理)
tee /etc/systemd/system/tomcat.service << EOF
[Unit]
Description=Apache Tomcat 11 Web Application Container
After=network.target
[Service]
Type=forking
# 指定 JDK 25 路径
Environment=JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
# 合并 JVM 参数
Environment='CATALINA_OPTS=\
-Xms2g -Xmx2g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Djava.awt.headless=true \
-Djava.security.egd=file:/dev/./urandom \
-Duser.timezone=Asia/Shanghai'
Environment='JAVA_OPTS=-Djava.awt.headless=true'
# 内存参数 -Xms2g -Xmx2g 可根据你的服务器内存调整(如 1G、4G 等)。
# 直接调用 catalina.sh 而非 startup.sh
ExecStart=/opt/tomcat/bin/catalina.sh start
ExecStop=/opt/tomcat/bin/catalina.sh stop
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
# 增加超时时间(根据应用启动时间调整)
TimeoutStartSec=180
TimeoutStopSec=180
# 确保 temp 目录存在(可选但推荐)
ExecStartPre=/bin/mkdir -p /opt/tomcat/temp
ExecStartPre=/bin/chown -R tomcat:tomcat /opt/tomcat
# ... 其他配置 ...
LimitNOFILE=65536
LimitNPROC=65536
[Install]
WantedBy=multi-user.target
EOF
# 1.7 启动tomcat
systemctl daemon-reload
systemctl enable --now tomcat
systemctl status tomcat
2. 安全加固
1. 删除示例应用(生产环境不需要)
rm -rf /opt/tomcat/webapps/{docs,examples,host-manager,manager}
⚠️ 如果你需要使用 Manager App,请保留
manager,但务必限制访问(见下文)。
2. (可选)启用 Manager 并限制 IP
若需保留 Manager:
sudo cp -r /opt/tomcat/webapps.dist/manager /opt/tomcat/webapps/
编辑访问控制:
vim /opt/tomcat/webapps/manager/META-INF/context.xml
修改 <Valve> 部分,仅允许本地或指定 IP:
3. 设置 Manager 用户(如启用)
vim /opt/tomcat/conf/tomcat-users.xml
在 <tomcat-users> 标签内添加:
务必使用强密码!
3. 性能优化(Tomcat 11 + JDK 25)
1.server.xml 优化(位于 $CATALINA_HOME/conf/server.xml)
替换 <Service name="Catalina"> 内容为以下配置:
示例:
#备份元配置文件
cp /opt/tomcat/conf/server.xml /opt/tomcat/conf/server.xml.bak
vim /opt/tomcat/conf/server.xml
✅ 说明:
- 使用
Http11Nio2Protocol(基于 Linux epoll 的异步非阻塞 IO),性能优于 BIO/NIO。maxThreads=500足够应对高并发;实际值应根据压测调整。- 启用
compression减少带宽,提升前端加载速度。enableLookups="false"禁用 DNS 反查,避免延迟。
2. 调整系统文件描述符(高并发需要)
echo -e "* soft nofile 65536\n* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session
3. context.xml 清理(位于 $CATALINA_HOME/conf/context.xml)
确保 不要包含以下已废弃的缓存属性:
4.操作系统调优:
# 提高文件描述符限制(/etc/security/limits.conf)
tomcat soft nofile 65536
tomcat hard nofile 65536
# 调整内核网络参数(/etc/sysctl.conf)
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
4.验证安装与优化
# 检查服务状态
systemctl daemon-reload
systemctl restart tomcat
systemctl status tomcat
# 测试 HTTP 响应
curl -I http://localhost:8080
# 查看 JVM 参数
ps -ef | grep tomcat
# 查看监听端口
ss -tuln | grep 8080
# 查看日志
sudo journalctl -u tomcat -f
浙公网安备 33010602011771号