Tomcat JDBC池–连接泄漏–捕获罪魁祸首

数据库连接泄漏是可以隐藏的东西,除非特别注意,否则将在系统高峰期最关键的阶段暴露出来。 我们将手动检查所有打开的连接是否已正确关闭。 然后,我们将提供各种代码质量插件来进行扫描和检查。 当连接通过复杂的程序结构传递时,这两个都可能会丢失可能的连接泄漏。 然后在单元测试或集成测试级别,我们可以进行检查以验证连接池中的计数,以避免这种不幸的情况,这种情况会使工程师在年末或黑色星期五忙,等等:)

在不幸的情况下,由于性能下降或整个系统崩溃(可通过JDBC连接泄漏传播),当我们怀疑连接泄漏时,如何轻松而Swift地找出罪魁祸首。 在Tomcat连接池中,我们可以使用3个属性来完成此操作。

removeAbandoned

如果数据库连接已被放弃(一段时间未使用,但尚未返回到池中),则此配置将尝试删除它。 以下配置配置了删除连接之前要等待的时间。

removeAbandonedTimeout

在尝试删除连接之前,它将花费的时间。 默认情况下为60s。

注意:当我们将此属性与目标一起使用来隔离罪魁祸首时,了解系统将在数据库上执行的最长事务所花费的平均时间很有用。 将此值设置为比该值大得多的值将避免我们捕获可能实际上在做有用工作的无辜线程,最后将被适当地关闭。

logAbandoned

以此来控制“删除删除的连接时是否应记录堆栈跟踪”。

有关这些属性的更多详细信息,请参见
https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes

如果您怀疑应用程序是否有泄漏,这些配置也可以用作安全网。 因为它将自动删除已忘记关闭的连接,并且池将进行处理以适当考虑这些,从而保持预期的最小,最大和空闲连接数。

这是我在池中删除废弃连接时捕获的示例日志。

 [ 2020 - 04 - 24 00 : 26 : 13 , 229 ] WARN {org.apache.tomcat.jdbc.pool.ConnectionPool} - Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection @5ab91385 ]:java.lang.Exception at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java: 1096 ) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java: 799 ) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java: 648 ) at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java: 200 ) at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java: 128 ) at org.lanka.carbon.user.core.jdbc.JDBCUserStoreManager.getDBConnection(JDBCUserStoreManager.java: 1187 ) at org.lanka.sample.CustomUserStoreManager.doAuthenticate(CustomUserStoreManager.java: 51 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.authenticateInternal(AbstractUserStoreManager.java: 674 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.access$ 100 (AbstractUserStoreManager.java: 86 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 4 .run(AbstractUserStoreManager.java: 542 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 4 .run(AbstractUserStoreManager.java: 539 ) at java.security.AccessController.doPrivileged(Native Method) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.authenticate(AbstractUserStoreManager.java: 539 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.authenticateInternal(AbstractUserStoreManager.java: 702 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.access$ 100 (AbstractUserStoreManager.java: 86 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 4 .run(AbstractUserStoreManager.java: 542 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 4 .run(AbstractUserStoreManager.java: 539 ) at java.security.AccessController.doPrivileged(Native Method) at org.lanka.carbon.user.core.common.AbstractUserStoreManager.authenticate(AbstractUserStoreManager.java: 539 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 3 .run(AbstractUserStoreManager.java: 522 ) at org.lanka.carbon.user.core.common.AbstractUserStoreManager$ 3 .run(AbstractUserStoreManager.java: 514 ) at java.security.AccessController.doPrivileged(Native Method) 

您可以在此处捕获与废弃连接创建相关的整个堆栈跟踪,这将使我们更快地找到问题的根源。

(可选)我们还可以选择使用JConsole通过JMX监视JDBC池。 为此,我们需要启用属性 jmxEnabled' ,该属性将允许从Jconsole连接到JDBC池。 完成后,它具有监视池的许多功能,甚至可以设置为在检测到连接被放弃时发出通知。

希望这可以帮助您节省一些时间进行故障排除。

干杯!

翻译自: https://www.javacodegeeks.com/2020/04/tomcat-jdbc-pool-connection-leak-catch-the-culprit.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户端怎么远程上服务器失败,远程客户端连接不上,与服务器那台,跨网络,怎么解决...

对应版本:用友U8.52对应产品线:供应链对应模块:销售管理模块问题现象:1、销售发货单参照单生成不能增行(充许超计单发货)?新增行单价为0如何体现。2、到货单中合格数不可填写(不用GSP质量管理),参照生成的入库单不可改数量&#x…

用火狐录制脚本为空_功能测试——链接测试amp;脚本功能

链接测试对于页面链接功能,测试工程师需考虑其链接文字描述正确性、链接地址跳转正确性、链接触发脚本正确性、是否存在404错误等。如果是小型Web系统,链接较少,人工测试即可,如果被测对象包含很多链接,则可利用Xenu链…

Tycoon:针对多种平台上的Java JIMAGE的勒索软件

黑莓研究与情报团队和毕马威(KPMG)的英国网络响应服务团队报告说:“ 威胁焦点:大亨勒索软件针对教育和软件行业 。” 该报告概述了“针对Windows和Linux的多平台Java勒索软件,至少从2019年12月开始就在野外观察到”&am…

笔记本电脑显示打印机服务器关闭,笔记本win10系统的打印机服务怎么禁用或重启...

笔记本win10系统的打印机服务怎么禁用或重启腾讯视频/爱奇艺/优酷/外卖 充值4折起在我们的生活中,如果打印机出错了,我们就需要关闭打印机或者重启打印机,那么笔记本的win10系统禁用/启动打印机服务方法是什么呢?下面小编告诉大家…

python 发送邮件附件很慢_python下smtpsendmail发送特别慢

调用send_mail时卡在s.sendmail(me,to_list,fullText)不动了,很久才响应。代码如下:defsend_mail(to_list,sub,content,path):memail_usermain_msgemail.MIMEMultipart.MIMEMultip...调用send_mail时卡在s.sendmail(me, to_list, fullText)不动了&#x…

junit runner_了解JUnit的Runner架构

junit runner几周前,我开始创建一个小的JUnit Runner( Oleaster ),它允许您使用Jasmine方式在JUnit中编写单元测试。 我了解到,创建自定义JUnit Runners实际上非常简单。 在这篇文章中,我想向您展示JUnit R…

php 邮件服务器 群发,发送使用PHP群发电子邮件发送使用PHP群发电子邮件(Sending mass email usin...

我目前正在写一个音乐博客。 管理员发布一个新的文章每2-3天。 一旦管理员岗位的文章,群发电子邮件将被立即发送到5000左右的用户。什么是实现群发邮件功能的最佳方法是什么?请问下面的函数工作?function massmail(){$content ...;foreach (…

linq判断集合中相同元素个数_iOS开发swift语法梳理:集合Set

1.集合的三特性确定性:给定一个集合,任意给一个元素,该元素或者属于或者不属于该集合,二者必居其一。互斥性:一个集合中的所有元素都是不相同的。无序性:每个元素的地位相同,元素之间是无序的。…

Java 14:有用的NullPointerException消息

Java 14中引入了新的JVM选项-XX:ShowCodeDetailsInExceptionMessages ,以提供有用的NullPointerException消息 ,以准确显示在发生NullPointerException时为空。 例如,考虑以下代码: var name library.get( "My Book" )…

世界机器人冠军王宇航_★​身边的榜样,为你喝彩:我校学子摘冠第七届河南省VEX U机器人挑战赛...

近日,第七届河南省大学生机器人竞赛在河南开放大学顺利闭幕。我校2018级机自专业学生王宇航、李泽坤和应用物理学专业学生闫朝硕荣获“VEX U机器人挑战赛冠军”、“VEX U机器人挑战赛一等奖”,中原工学院荣获“优秀组织奖”。一份耕耘、一份收获&#xf…

python监控服务器信息,Python监控服务器实现邮件微信报警

本文中笔者暂时实现的只有cpu和内存的监控,python可以监控许多的主机信息,网络,硬盘,机器状态等,以下是代码的实现,代码可以实现windows和 linux 的监控。实验环境:Ubuntu16.04和windos10&#…

对象空指针_可选和对象:空指针救星!

对象空指针没有人喜欢空指针异常 ! 我们有办法摆脱它们吗? 也许 。 。 。 这篇文章中讨论了几种技术: 可选类型(Java 8中的新增功能) 对象类(旧的Java 7东西!) Java 8中的可选类…

循环发ajax请求,在循环中发送jquery ajax请求

我在我的Web应用程序的Map中实现了“空间选择”,它选择Streets的数量。选择后,我会为使用“选择处理程序”选择的所有街道获取唯一的街道标识。在循环中发送jquery ajax请求我的下一步是发送Ajax请求到每个街道Id的服务器并获取回应。目前,我…

延迟关机_苹果电脑到底需不需要关机?关机和休眠你选择哪个

刚买了MacBook的朋友,会不会跟小编一样,是格外的珍惜,总想以一种最好的方式使用自己人生中第一个苹果电脑。苹果笔记本需要关机吗?不关机会卡吗?也成了自己关心的话题!Mac 到底要不要关机,这个问…

关于高效企业测试的思考(1/6)

企业中的测试仍然不是应有的广泛使用的话题。 编写尤其是维护测试需要花费时间和精力,但是缩短软件测试并不是解决方案。 为了提高测试效率,应该追求哪些范围,方法和测试技术? 我根据许多实际项目,结合了我在企业测试…

电脑开机后显示服务器没有声音,我的电脑音频服务启动不了,没有声音,小扬声器那里是一个红色的小叉叉...

(我系统是W7普通家庭版32位)一、电脑没了声音,小喇叭上有个红叉,鼠标放上去显“音频服务未运行”,进入控制面板,声音里显没有设备。1,确保硬件好的前提下,还是得先检查下你的驱动有没有问题。2,…

10鼎信诺为什么安装不了_鼎信诺审计软件一周常见问题(4.134.17)

今天介绍一下近期咨询较多的两款财务软件在取数后不能显示辅助核算明细的问题,分别是诺诺云和亿企代账,这两款软件都是采用云记账方式,均可以通过其平台中的导出审计数据的功能导出一个备份文件夹,备份文件夹中都是TXT格式的文本文…

Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您已经成为Java开发人员超过15年,那么您可能还记得什么时候有过多的J…

http服务器网站打不开,网站打不开_ostonkin8743的博客__杭州19楼

HTTP 错误 403 - 限制为仅本地主机访问 Internet 服务管理器 (HTML)HTTP 错误 403 403.1 禁止:禁止执行访问如果从并不允许执行程序的目录中执行 CGI、ISAPI 或其他执行程序就可能引起此错误。如果问题依然存在,请与 Web 服务器的管理员联系。HTTP 错误 …

函数传参字典_Python 函数中的 4 种参数类型

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/89538123来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。在调用函数时,通常会传递参数,函数内部的代码保持不变&#x…