执行3次操作后网站无限加载无响应 无报错需重启Tomcat如何解决
故障排查与解决方案
优先排查数据库连接泄漏问题
你遇到的固定次数操作后服务阻塞、重启Tomcat即可恢复的表现,90%以上概率是数据库连接未正确释放导致的连接池占满:
- 检查所有业务代码中
Connection、Statement、ResultSet资源的释放逻辑,必须在finally块中按顺序关闭资源,或者使用try-with-resources语法自动关闭 - 可以临时在Tomcat的
context.xml中开启连接池的泄露检测:找到你配置的数据源Resource节点,添加以下属性:
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
配置后如果存在连接泄漏,超过60秒未关闭的连接会被强制回收,同时控制台会打印泄漏点的堆栈信息,可直接定位到未关闭连接的代码位置。
若排除连接泄漏再排查其他配置问题
你猜测的缓存配置问题概率较低,可按以下顺序排查:
- 检查Tomcat线程池配置:查看
conf/server.xml中的<Connector>节点,默认maxThreads为200,远不会出现3次操作就占满的情况,如果你手动修改过极小的数值可调回默认值 - 排查线程死锁:服务阻塞时使用
jstack命令导出Tomcat进程的线程堆栈,搜索是否存在BLOCKED状态的线程,定位死锁位置。
快速验证方案
你可以先临时将Tomcat数据库连接池的最大连接数调整到20,观察是否操作到20次左右才出现阻塞,如果完全符合该规律即可确认是连接泄漏问题。
内容的提问来源于stack exchange,提问作者Fatted
相关产品推荐
相关产品推荐

