在 CentOS 上部署基于 Tomcat 的 Java 应用时,需重点关注以下关键事项,以确保稳定性、安全性和可维护性:
一、环境准备与依赖管理
-
JDK 版本匹配
- 确认 Tomcat 版本与 JDK 版本兼容(如 Tomcat 9+ 推荐 JDK 8/11/17;Tomcat 10+ 要求 JDK 11+)。
- 避免使用系统自带的 OpenJDK(可能版本过旧或配置不完整),建议从 Adoptium 或 Oracle 官网安装指定版本。
- 设置
JAVA_HOME和PATH环境变量(推荐写入/etc/profile.d/java.sh)。
-
系统依赖库
- 安装必要的基础库:
glibc,libstdc++,fontconfig(若涉及报表/图形)等。 - 检查
ldd输出确保无缺失共享库(尤其对 Native 组件如 JNA、JNI 模块)。
- 安装必要的基础库:
二、安全加固
-
最小权限原则
- 创建专用用户运行 Tomcat(如
tomcat),禁止以 root 启动。 - 限制目录权限:
chown -R tomcat:tomcat /opt/tomcat chmod -R 750 /opt/tomcat/{bin,webapps} chmod 640 /opt/tomcat/conf/server.xml
- 创建专用用户运行 Tomcat(如
-
网络与防火墙
- 仅开放必要端口(默认 8080),通过
firewalld或iptables限制来源 IP。 - 禁用不必要的协议(如 AJP 若未使用则注释掉
<Connector protocol="AJP/1.3">)。
- 仅开放必要端口(默认 8080),通过
-
敏感信息防护
- 密码、密钥等严禁硬编码在
server.xml或context.xml中,改用环境变量或外部配置中心(如 Vault)。 - 启用 HTTPS:配置 SSL/TLS(推荐 Let’s Encrypt + Nginx 反向X_X)。
- 密码、密钥等严禁硬编码在
三、性能与资源优化
-
JVM 参数调优
- 根据服务器内存合理设置
-Xms/-Xmx(通常设为物理内存的 50%~70%)。 - 添加常用参数示例:
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom - 注意:CentOS 7/8 内核页大小可能影响堆栈行为,必要时调整
ulimit -s。
- 根据服务器内存合理设置
-
文件描述符限制
- Tomcat 高并发下易触发
Too many open files错误:# /etc/security/limits.d/tomcat.conf tomcat soft nofile 65536 tomcat hard nofile 65536 - 重启后验证:
ulimit -n(需在登录 shell 生效,systemd 服务需单独配置)。
- Tomcat 高并发下易触发
-
Systemd 服务配置
- 编写
/usr/lib/systemd/system/tomcat.service,包含:[Service] User=tomcat Group=tomcat Environment="JAVA_HOME=/opt/jdk" ExecStart=/opt/tomcat/bin/startup.sh Restart=on-failure LimitNOFILE=65536 - 启用并开机自启:
systemctl enable --now tomcat
- 编写
四、日志与监控
-
日志轮转
- 配置
logrotate防止 Catalina.out 无限增长:/opt/tomcat/logs/*.log { daily rotate 14 compress delaycompress missingok notifempty create 640 tomcat tomcat }
- 配置
-
健康检查与监控
- 开启 JMX 远程监控(需谨慎配置认证)或使用 Prometheus Exporter。
- 集成 ELK/Loki 收集分析日志。
- 定期检测磁盘空间、内存泄漏(可通过 VisualVM 或 Arthas 辅助诊断)。
五、运维实践建议
- 版本控制:使用 Git 管理应用代码,配合 CI/CD(如 Jenkins/GitLab CI)自动构建部署。
- 备份策略:定期备份
webapps、conf、数据库及日志归档。 - 升级流程:先在测试环境验证,采用蓝绿部署或滚动更新减少停机时间。
- SELinux 处理:若启用 SELinux,需正确设置上下文:
semanage fcontext -a -t httpd_exec_t "/opt/tomcat(/.*)?" restorecon -Rv /opt/tomcat
💡 常见陷阱提醒
- ❌ 直接修改
server.xml中的maxThreads而未评估 GC 压力- ❌ 忽略 UTF-8 编码导致中文乱码(务必显式设置
URIEncoding="UTF-8")- ❌ 将 WAR 包解压到
webapps后手动编辑类文件(应通过热部署或容器化方案)
如需针对特定场景(如 Docker 容器化、Kubernetes 编排、高可用集群)进一步细化,可提供具体需求继续深入探讨。
PHPWP博客