Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
mysql purge binary log_java broken pipe怎么解决,希望能够帮助你!!!。
一、问题说明
二、源码
三、结果
框架使用spirng cloud 阿里版本,JPA使用mybatisPlus + druid 数据池,数据库采用mysql 5.7,因生产环境网络原因,应用程序连接mysql 中间使用隔离装置代理插件进行连接,应用程序正常部署后,使用时间不超10分钟,后台程序会报出SqlException:Broken pipe 管道破裂错误,程序无法恢复,所有连接失效。
经过查阅资料及一系列分析,这个问题的产生与mysql 经典的 8小时问题非常类似,参考博客:mysql经典的8小时问题-wait_timeout
系统使用了JPA使用mybatisPlus + druid 数据池,在mybatisPlus的配置文件中未对druid进行配置,使用的是druid默认配置,默认配置中连接池初始化连接数为0,最大连接数为8,未配置sql超时时间、连接有效验证等参数。
系统连接mysql 使用数据库隔离装置代理插件,代理插件性能很一般,连续发送几个列表查询sql 都会引起代理插件CPU飙升。鉴于这个代理插件性能,当程序发送大量sql 请求到达代理插件时,代理插件自我保护机制会将程序连接代理插件的sql连接主动kill掉,以防止代理插件服务宕机。
因应用程序与数据库之间的连接都为长连接,服务端代理插件断掉连接后,客户端应用程序没有进行连接的有效性检查,导致连接池内的连接全部无效,程序没法连接数据库,报出 Broken pipe 异
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇