我有一个应用程序在一段时间后开始出现内部服务器错误,我询问的一些人告诉我,这可能是因为我的应用程序中的连接泄漏。我开始搜索并发现这个查询来模拟连接泄漏。
select LAST_CALL_ET, SQL_TEXT, username, machine, to_char(logon_time, 'ddMon hh24:mi') as login, SQL_HASH_VALUE, PREV_HASH_VALUE, status from v$session, v$sql where username='USERNAME' and HASH_VALUE = PREV_HASH_VALUE
order by last_call_et desc;
.
我使用此查询监视我的应用程序,并关闭此结果中显示的查询的所有泄漏连接。但现在我的应用程序开始对更少的不活动会话给出相同的错误。
我是否使用正确的查询来查找活动会话/连接泄漏?有人告诉我这个查询中的条件 HASH_VALUE = PREV_HASH_VALUE 是错误的,但我不了解这些列(没有太多数据库知识。)
谢谢
如果您需要找出泄漏,您可以使用分析器,例如yourkit https://www.yourkit.com/docs/java/help/builtin_probes.jsp or jprofiler https://www.ej-technologies.com/products/jprofiler/overview.html它能够跟踪套接字/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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)