louislivi / SMProxy

Swoole MySQL Proxy 一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。 A MySQL database connection pool based on MySQL protocol and Swoole.
https://smproxy.louislivi.com
MIT License
1.78k stars 258 forks source link

空闲连接回收 #63

Closed scguang301 closed 4 years ago

scguang301 commented 4 years ago

Describe Your Environment (描述你的环境)

How to Reproduce the Problem? (如何重现问题)

开始并发量比较大,达到maxConns最大连接数,然后并发量逐渐减少,但mysql连接不会减少到spareConns。

Expected Behavior (预期行为)

并发量逐渐减少,但mysql连接会减少到spareConns

Actual Behavior (实际行为)

并发量维持在最大连接数,不会减少 ...

More Information (更多信息)

看代码看到只有客户端连接断开和连接池销毁时候,才根据maxSpareConns和maxSpareExp决定是否释放mysql连接, 并且$spareConns使用数组,使用时pop, 回收时相当于push,每次都使用数组尾端连接。 后面业务量减少的时候,只操作数组尾,没有达到 maxSpareExp, 不会释放。 需要定时检测每个mysql连接使用情况,超过maxSpareExp不用就释放 ...

louislivi commented 4 years ago

mysql每过一段时间会自动断开空闲连接,目前主要是靠mysql 自动断开机制实现的回收。 之前有考虑过定时器 后面发现配合mysql 自动断开会更加高效。

scguang301 commented 4 years ago

那是服务器设置空闲连接时间,如果服务器设置8小时,这么长时间保持空闲连接,比较浪费。 定时间只是检查一下空闲连接的最后连接状态,应该不会消耗什么性能

louislivi commented 4 years ago

好的,谢谢你的建议 后续可以会修复这个问题。