PHP多进程引发的msyql连接数问题
Posted hehexu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP多进程引发的msyql连接数问题相关的知识,希望对你有一定的参考价值。
php多进程引发的msyql连接数问题
业务中有一块采用了PHP的pcntl_fork多进程,希望能提高效率,但是在执行的时候数据库报错
PDO::prepare(): Premature end of data (mysqlnd_wireprotocol.c:1244) Packets out of order. Expected 1 received 108. Packet size=7102829
发现应该是短时间大量的链接写入数据库.导致数据库无法响应
show variables like ‘%max_connections%‘;
show variables like ‘%back_log%‘;
修改my.ini 配置 back_log
back_log = 104
MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
以上是关于PHP多进程引发的msyql连接数问题的主要内容,如果未能解决你的问题,请参考以下文章