• 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高于你的操作系统的限制将是无效的。

  • 相关阅读:
    fixed与sticky的区别
    自我介绍以及web课程目标
    DOM&BOM
    web中常用单位的使用
    Oracle 使用 DBLINK详解(转载) 挪威
    Sql server 无法删除用户的处理办法(转载) 挪威
    ICMP类型
    makefile笔记
    [笔记]Makefile wildcard
    在Visual Studio 2005下配置WinPcap开发环境
  • 原文地址:https://www.cnblogs.com/hehexu/p/10159873.html
Copyright © 2020-2023  润新知