总体结论
在Ubuntu上,Tomcat通常能够长期稳定运行。社区与行业实践普遍认为,Tomcat在Linux平台的表现成熟可靠,而Ubuntu作为稳定的服务器操作系统,二者组合被广泛用于生产环境。只要遵循合理的部署、JVM与线程池调优、日志与监控等最佳实践,稳定性可以得到进一步保障。
影响稳定性的关键因素
- JDK版本匹配与兼容:选择与Tomcat版本兼容的OpenJDK(如8、11),并保持JDK更新到受支持版本,避免因版本不匹配导致崩溃或不稳定。
- 内存与GC设置:为JVM设置合适的堆大小(如**-Xms/-Xmx**)与垃圾回收策略,减少Full GC抖动与OOM风险,这是长稳运行的核心。
- 连接器与线程池:根据并发量调整maxThreads、acceptCount、connectionTimeout等,避免线程耗尽或连接堆积。
- 日志与磁盘:启用访问日志与运行日志、合理的日志轮转与保留策略,防止因日志过大导致磁盘被占满而引发故障。
- 网络与安全配置:开放必要端口(如8080/8443)、启用HTTPS/TLS、限制管理控制台访问,降低因安全事件导致的稳定性问题。
稳定运行建议
- 以systemd托管:创建Tomcat的systemd服务(设置User/Group、Environment、ExecStart/ExecStop、Restart=always),实现开机自启、崩溃自动拉起与统一日志管理。
- JVM与线程池基线调优:例如设置**-Xms512M -Xmx1024M**、使用并行GC;在server.xml中按并发规划maxThreads(如150–250)、合理acceptCount与超时,避免过载。
- 日志与轮转:在server.xml启用AccessLog Valve;使用logrotate对catalina.out等日志进行按大小滚动与压缩,避免单文件过大与磁盘撑满。
- 监控与告警:使用systemctl与tail查看服务与日志;通过JMX结合VisualVM/JConsole或Prometheus + JMX Exporter监控线程、堆、GC;对ERROR/OutOfMemoryError设置告警。
常见问题与快速排查
- 端口未放行:若无法访问8080/8443,检查UFW/云安全组是否放行对应端口(如sudo ufw allow 8080/tcp)。
- 内存或线程耗尽:catalina.out出现OutOfMemoryError或线程满负荷,适当增大堆、优化GC;结合线程转储(jstack)排查死锁/阻塞;按并发调高maxThreads/acceptCount。
- 日志膨胀:磁盘告警时,优先核查并调整logrotate策略,压缩并保留有限份数,清理历史归档。