我运行一些 tomcat 应用程序,使用 jndi 连接池。 在某些时候连接池停止提供连接和应用程序挂起。 似乎是因为某些代码接收到连接并且没有将其返回到池中。 我如何监控 - 哪些代码执行此操作? 更常见 - 我想看看此时所有连接都在做什么。
我无法更改应用程序。但是我可以调整 Tomcat,也许添加一些拦截器。
最佳答案
大多数连接池实现都可以配置为检测未返回到池中的连接。例如。对于 Tomcat 的 JDBC 连接池,“放弃的连接”(租约过期的连接)有多种配置选项。如果您在 this 上搜索“废弃”网页,您会找到以下选项:
- 删除放弃
- 移除AbandonedTimeout
- 记录放弃
- 怀疑超时
如网页上所述,这些设置会增加一些开销,但至少您的应用程序不会挂起。测试您的应用程序时,为 removeAbandonedTimeout
和 maxActive
设置一个较低的值,以便您可以及早捕获未返回的连接。
关于java - 如何监控我的连接去向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21040635/