现在业务用的数据库是另一个云服务器中的数据库,使用中经常出现busy阻塞的情况,排查后发现是阻塞在数据库调用,已经加了定时器,进程40s查询一下空表,但还是会出现这种情况。阻塞时会一直阻塞在那里,导致后面的请求无法处理。请问大佬们,有没有办法设置一下数据库连接超时,数据库组件是官方提供那个,连接不上直接抛出异常,不要无休止的等下去。备注一下:云服务器是阿里云的,网络是通畅的,数据库没有问题,因为还有另一个项目也在跑着,那个很正常。
之前我用阿里云数据库也遇到过类似问题。现象是mysql连接过了一段时间(30秒还是60秒记不清了)不管执行什么sql都超时,原因初步判断为阿里云会把空闲mysql连接单向关闭,关闭时并不会通知客户端。后来解决办法是每隔15秒发送一个select 1 维持连接存活,然后就没有问题了,不知道你的是不是这个问题。你定时40秒改成15秒试下吧。
select 1
感谢,试一下15s
就是这种感觉
参考 这个 http://doc.workerman.net/debug/busy-process.html 定位下
参考了,全部阻塞在数据库操作
最后会报一个数据库连接错误。数据库是云数据库,项目跑在本地,内网用。
兄弟们,找到原因了,是硬件问题。网线水晶头连接不稳定,会出现偶尔断网的情况,如果在断网期间正好请求了数据库,就会一直阻塞在那里,折腾死,这个功能已经换java重写了,结果找到原因了。为什么断网后,java的连接池不会出问题呢。
应该是mysql驱动没有断线重连机制!
之前我用阿里云数据库也遇到过类似问题。现象是mysql连接过了一段时间(30秒还是60秒记不清了)不管执行什么sql都超时,原因初步判断为阿里云会把空闲mysql连接单向关闭,关闭时并不会通知客户端。后来解决办法是每隔15秒发送一个
select 1
维持连接存活,然后就没有问题了,不知道你的是不是这个问题。你定时40秒改成15秒试下吧。感谢,试一下15s
就是这种感觉
参考 这个 http://doc.workerman.net/debug/busy-process.html 定位下
参考了,全部阻塞在数据库操作
最后会报一个数据库连接错误。数据库是云数据库,项目跑在本地,内网用。
兄弟们,找到原因了,是硬件问题。网线水晶头连接不稳定,会出现偶尔断网的情况,如果在断网期间正好请求了数据库,就会一直阻塞在那里,折腾死,这个功能已经换java重写了,结果找到原因了。为什么断网后,java的连接池不会出问题呢。
应该是mysql驱动没有断线重连机制!