我有一个应用程序在一段时间后开始给我内部服务器错误,我问过一些人告诉我这可能是因为我的应用程序中的连接泄漏。我开始搜索并找到了这个模拟连接泄漏的查询。
选择 LAST_CALL_ET、SQL_TEXT、用户名、机器、to_char(logon_time、'ddMon hh24:mi') 作为登录、SQL_HASH_VALUE、PREV_HASH_VALUE、来自 v$session 的状态、v$sql where username='USERNAME' 和 HASH_VALUE = PREV_HASH_VALUE
按 last_call_et desc; 排序;
。
我使用此查询监视了我的应用程序,并关闭了此结果中显示的查询的所有泄漏连接。但是现在我的应用程序开始为更少的非 Activity session 提供相同的错误。 我是否使用正确的查询来找出 Activity session /连接泄漏?有人告诉我这个查询中的条件 HASH_VALUE = PREV_HASH_VALUE 是错误的,但我不知道这些列(没有太多的数据库知识。)
谢谢
最佳答案
如果您需要找出泄漏,您可以使用类似 yourkit
的分析器或 jprofiler
它能够跟踪套接字/jdbc 泄漏。
要修复泄漏,您必须找出打开连接的位置,并使用 try-with-resources,它将为您完成所有 close()
操作
try (Connection conection = DriverManager.getConnection(url);
PreparedStatement statement = createPreparedStatement(conection);
ResultSet resultSet = statement.executeQuery()) {
// process the resultSet here, all resources will be cleaned up
}
关于java - 在 Java 应用程序中查找连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39474430/