Tomcat 常见问题与实用技巧
2025/9/17大约 3 分钟
Tomcat 常见问题与实用技巧
前置知识
建议你已掌握 Tomcat 部署、调优与安全加固。
目录
常见报错与解决方案
场景 | 报错信息 | 解决方案 |
---|---|---|
端口被占用 | Address already in use | 修改 server.xml 端口或释放端口 |
404 错误 | 资源未找到 | 检查 webapps 目录、urlPatterns、部署路径 |
403/401 | 权限不足 | 检查 tomcat-users.xml、IP 限制 |
500 错误 | NullPointerException | 检查应用代码、日志 |
中文乱码 | 乱码或问号 | 设置 URIEncoding="UTF-8"、req/resp 编码 |
内存溢出 | java.lang.OutOfMemoryError | 调整 Xmx/Xms、排查内存泄漏 |
热部署失效 | 应用未自动重载 | 检查 reloadable、war 包结构 |
FAQ:高频问题解答
1. Tomcat 如何修改默认端口?
- 编辑 conf/server.xml,将
<Connector port="8080" .../>
改为其他端口
2. 如何配置多站点/虚拟主机?
- 在 server.xml 的
<Engine>
下添加多个<Host>
,每个 Host 配置独立 appBase
3. Tomcat 如何支持 HTTPS?
- 生成证书,配置 server.xml 的 HTTPS Connector,详见前文
4. 如何限制上传文件大小?
- 在 web.xml 配置
maxFileSize
,或在应用代码中校验
5. 如何查看 Tomcat 版本?
- 启动日志、
bin/version.sh
或version.bat
调试与排查技巧
- 日志优先:遇到问题先查 logs/catalina.out、localhost.log
- 端口检测:
netstat -ano | findstr 8080
(Win),lsof -i:8080
(Linux) - JVM 参数:
ps aux | grep java
查看当前 JVM 配置 - 热部署问题:清理 work 目录,重启 Tomcat
- 内存泄漏排查:开启 GC 日志,使用 jvisualvm、MAT 工具分析
清理 work 目录命令
rm -rf work/*
日志分析与定位
- catalina.out:主日志,启动、异常、GC 信息
- localhost.log:本地主机请求日志
- manager.log:管理后台日志
日志实时查看
tail -f logs/catalina.out
- 日志中常见关键字:Exception、Error、WARN、SEVERE
- 遇到异常建议全文搜索异常栈信息
端口与编码问题
- 端口冲突:修改 server.xml,或释放被占用端口
- URIEncoding:Connector 节点加
URIEncoding="UTF-8"
,防止中文乱码 - 请求/响应编码:应用代码设置
req.setCharacterEncoding("UTF-8")
、resp.setContentType("text/html;charset=UTF-8")
热部署与内存泄漏
- 热部署失效:确认 reloadable="true",清理 work 目录,重启 Tomcat
- 内存泄漏:常见于 JDBC 未关闭、Listener/Filter 静态变量、第三方库未释放资源
- 排查工具:jvisualvm、MAT、GC 日志
内存泄漏排查流程
- 观察 catalina.out 是否有 OutOfMemoryError
- 开启 GC 日志,分析内存回收情况
- 使用 jvisualvm 连接 Tomcat,查看堆内存、线程、对象引用
- 导出堆快照(heap dump),用 MAT 工具分析泄漏对象
学习资源与小结
- 日志、端口、编码、内存是 Tomcat 排查的重点
- 推荐定期清理 work/logs 目录,关注内存与线程使用
- 生产环境建议关闭热部署、加强安全配置
- Tomcat 是 Java Web 的基石,深入理解有助于高效开发与运维
本文为 Tomcat 系列教程收官篇,感谢阅读,祝你学有所成!