如何监控我的连接在哪里?

时间:2014-01-10 09:35:43

标签: java tomcat jdbc connection-pooling

我运行一些tomcat应用程序,使用jndi连接池。 在某些时候,连接池停止以提供连接和应用程序挂起。 似乎是因为某些代码接收到连接而没有将其返回池中。 我该如何监控 - 哪些代码可以实现? 更常见的 - 我想看看目前所有连接都做了什么。

我无法更改申请。但我可以调整Tomcat,也许可以添加一些拦截器。

2 个答案:

答案 0 :(得分:1)

大多数连接池实现都可以配置为检测未返回池的连接。例如。对于Tomcat的JDBC连接池,“废弃连接”(租约已过期的连接)有各种配置选项。如果您在this网页上搜索“被遗弃”,您会找到以下选项:

  • removeAbandoned
  • removeAbandonedTimeout
  • logAbandoned
  • suspectTimeout

正如网页上所提到的,这些设置会增加一些开销,但至少你的应用程序不会挂起。在测试应用程序时,为removeAbandonedTimeout设置一个较低的值,为maxActive设置一个较低的值,以便您可以提前捕获未返回的连接。

答案 1 :(得分:0)

我从不使用连接池API本身,我总是将它包装在帮助器中。

这样,我可以在帮手中做到这一点:

private Exception created = (0 == 1) ? new Exception() : null;

当遇到像你这样的问题时,我只需更改一个字符(0 - > 1),以获得在我的调试器中创建此实例的堆栈跟踪。