zoukankan      html  css  js  c++  java
  • 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高于你的操作系统的限制将是无效的。

  • 相关阅读:
    面试
    vue axios 应用
    3D全景之ThreeJs
    css垂直居中
    事件处理过程中遇到的问题
    文字溢出
    jquery: 偏移量计算
    jquery: sand picture
    jquery: update carousel logic & animate
    jquery: carousel arrow click
  • 原文地址:https://www.cnblogs.com/hehexu/p/10159873.html
Copyright © 2011-2022 走看看