每次客户端和workerman连接,workerman都会新建一个mysql连接,导致mysql产生大量sleep进程

初次mysql报错too many connection
后面修改了mysql的max_connections值,初步解决了。但是这个不是最终方案呀。我用的数据库类是workerman-mysql,每次客户端连接gatwayworker都会创建一次mysql连接,能不能像apache那样子不管多少客户端访问都始终有一个mysql连接

634a9b1d98e45657e888fe18382f51ab.png

 
已邀请:

blogdaren - 乐于分享的PHP码农【http://www.blogdaren.com】

赞同来自: guonan89

1、首先产生大量的sleep线程,通常原因是mysql客户端没有及时关闭对应的连接,或者是 mysql服务端wait_timeout超时时间配置过大,而此期间客户端没有发来任何请求所致,但是有sleep线程并不代表就一定有问题,多个长连接属于连接复用,性能好,少量动态连接则意味着频繁的tcp三次握手,性能不好,而业务比较清淡则产生大量的连接,那肯定是有问题,所以要看整体上线文环境。
2、apache访问mysql只有一个连接? 一般的应用怎么可能呢? 具体发起了多少个连接,那得看客户端建立了多少个连接,若只有一个,那说明客户端做了特殊连接处理比如强制有且仅有建立了一个连接。
3、同样的对于使用workerman-mysql建立连接,可以建立一个,也可以建立N个,这看你怎么用,【每次客户端连接gatwayworker都会创建一次mysql连接】这个是你使用有问题,一般的应该在onWorkerStart 里初始化数据库连接,而不是在onConnect里。
4、另外可以考虑使用mysql连接池的方案来解决问题。

要回复问题请先登录注册