Debian上Tomcat运行不稳定的排查与加固清单
一 快速定位与修复
- 查看关键日志:优先检查 catalina.out 与 localhost.<日期>.log,必要时实时跟踪:tail -f /var/log/tomcat/catalina.out;如使用包管理安装的 Tomcat 9,日志常在 /var/log/tomcat/,解压版可能在安装目录的 logs/。
- 检查端口占用与冲突:netstat -tulnp | grep 8080;若被占用,结束占用进程或修改 conf/server.xml 中的 Connector port。
- 校验配置与依赖:核对 server.xml 语法与连接器参数;确认 JAVA_HOME 指向有效 JDK;确保应用 WEB-INF/lib 依赖完整。
- 权限与目录:确保 logs、work、temp 等目录对 Tomcat 运行用户可写,避免因权限导致崩溃或无法启动。
- 重启与更新:完成排障后重启服务,并保持系统与 Tomcat 为稳定版与最新补丁。
二 稳定性优化清单
- JVM 与 GC:设置合适的堆与非堆,例如:CATALINA_OPTS=“-Xms512M -Xmx1024M -server”;Java 8+ 关注 Metaspace(如:-XX:MetaspaceSize=… -XX:MaxMetaspaceSize=…),根据负载选择 G1GC 或 ParallelGC。
- 线程与连接器:在 server.xml 调整 maxThreads、minSpareThreads、acceptCount;优先使用 NIO/NIO2 连接器;按需开启 GZIP 压缩;优化 connectionTimeout 与超时策略。
- 数据库与连接池:使用成熟的连接池(如 DBCP/C3P0/HikariCP),合理配置最大连接、最小空闲、超时与验证查询,避免连接泄漏拖垮稳定性。
- 操作系统:适度提升 文件描述符上限(ulimit -n)、优化 TCP 缓冲区 等内核参数,支撑更高并发。
- 安全与权限:以非 root用户运行;限制管理界面访问;必要时删除或限制 webapps/manager 与 webapps/host-manager 的访问。
三 内存溢出与异常请求专项处理
- 堆溢出 OOM:当出现 java.lang.OutOfMemoryError: Java heap space,优先增大 -Xmx,并结合 VisualVM/JConsole 观察对象分配与 GC 行为;排查大对象、缓存与集合泄漏。
- 元空间问题:Java 8+ 出现 Metaspace 不足时,增加 -XX:MaxMetaspaceSize;检查类加载器泄漏(热部署频繁、第三方库重复加载等)。
- 非法请求诱发崩溃:异常请求头可能触发解析异常并导致 CPU 飙升与后续 OOM(如解析 HTTP 方法名非法)。建议在反向代理或防火墙层做协议与头部校验,并开启访问日志与异常告警,及时封禁恶意来源。
四 运行环境与权限加固
- 专用用户与目录权限:创建 tomcat 用户与组,Tomcat 目录属主设为 tomcat,脚本可执行;避免使用 root 运行。
- systemd 服务与自恢复:配置 /etc/systemd/system/tomcat.service,设置 User/Group、环境变量(如 JAVA_HOME、CATALINA_HOME、CATALINA_BASE)、合理的 JVM 参数,并启用 Restart=always 实现异常退出自动拉起。
- 访问控制:通过 ufw/iptables 限制 8080/8443 来源 IP;管理界面仅在内网开放或使用 Nginx/Apache 反向代理做 Basic Auth 与 IP 白名单。
五 监控与维护
- 监控与诊断:使用 VisualVM、JConsole、JStat 观察 Heap/Meta、线程、类加载、GC 次数/停顿;结合 Tomcat 访问日志与 catalina.out 建立关键指标与错误告警。
- 日志与审计:规范化 logging.properties 与访问日志格式,定期归档与清理,避免磁盘被占满导致实例异常。
- 变更与回归:任何参数调整先在测试环境验证,再灰度上线;保持系统与中间件持续更新,及时修复已知问题。