我们有一个部署在 sun 应用程序服务器上的 struts Web 应用程序,尽管在开发环境中进行了负载测试/系统集成测试。没有连接泄漏的情况。
但是在生产环境中。随着使用的连接不断增加,可以看到连接泄漏。
除了应用程序代码,还有哪些场景会导致连接泄漏?
我们有一个部署在 sun 应用程序服务器上的 struts Web 应用程序,尽管在开发环境中进行了负载测试/系统集成测试。没有连接泄漏的情况。
但是在生产环境中。随着使用的连接不断增加,可以看到连接泄漏。
除了应用程序代码,还有哪些场景会导致连接泄漏?
你如何衡量这个?您是否正在查看数据库中的连接数?应用服务器中池的大小?您使用的是哪个数据库?
我不明白“没有连接 [原文如此] 泄漏的情况。” 如果您没有正确关闭所有结果集、语句和连接(在方法范围内的 finally 块中的单个 try/catch 块中,以实例化的相反顺序),您可能会遇到泄漏。
除非有另一个应用程序使用相同的数据库,否则它必须是您的代码或应用程序服务器。如果您对自己的代码深表否认,请尝试切换应用服务器,看看是否有帮助。
我建议您的测试场景不现实。如果您在生产中未观察到此行为,则可能是您的测试未触发该行为,或者测试和产品部署不完全相同。
连接泄漏是最常见的问题之一。造成这种情况的主要原因是未关闭结果集,使用后连接。
try{
//perform jdbc operations
}catch(Exception e){
//perform error operations
}finally{
//close the connections
}
还有一些方法可以启用连接泄漏日志记录,但这会影响性能。