我运行一些tomcat应用程序,使用jndi连接池。 在某些时候,连接池停止以提供连接和应用程序挂起。 似乎是因为某些代码接收到连接而没有将其返回池中。 我该如何监控 - 哪些代码可以实现? 更常见的 - 我想看看目前所有连接都做了什么。
我无法更改申请。但我可以调整Tomcat,也许可以添加一些拦截器。
答案 0 :(得分:1)
大多数连接池实现都可以配置为检测未返回池的连接。例如。对于Tomcat的JDBC连接池,“废弃连接”(租约已过期的连接)有各种配置选项。如果您在this网页上搜索“被遗弃”,您会找到以下选项:
正如网页上所提到的,这些设置会增加一些开销,但至少你的应用程序不会挂起。在测试应用程序时,为removeAbandonedTimeout
设置一个较低的值,为maxActive
设置一个较低的值,以便您可以提前捕获未返回的连接。
答案 1 :(得分:0)
我从不使用连接池API本身,我总是将它包装在帮助器中。
这样,我可以在帮手中做到这一点:
private Exception created = (0 == 1) ? new Exception() : null;
当遇到像你这样的问题时,我只需更改一个字符(0
- > 1
),以获得在我的调试器中创建此实例的堆栈跟踪。