PHP pdo 关于 mysql 报错 connection time out 的困惑,求指点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jasondan
V2EX    PHP

PHP pdo 关于 mysql 报错 connection time out 的困惑,求指点

  •  
  •   jasondan 2018-07-18 23:42:48 +08:00 5685 次点击
    这是一个创建于 2652 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近我们项目迁移到 AWS,使用了提供的 RDS 服务,配置已经 16 核 cpu。最大连接数为 5000,但是当连接数接近 1000 的时候,php 就开始偶尔抛出这个错误,而且我发现 php 连接数据库的时候总会出现连接时长比较久的问题。linux 的句柄数都调最大,但是是不 OK,各位大神有什么高见或者方向?

    22 条回复    2018-09-08 10:31:45 +08:00
    HanSonJ
        1
    HanSonJ  
       2018-07-19 00:03:25 +08:00
    看看是不是有 SQL 执行时间久占用资源
    tonylau
        2
    tonylau  
       2018-07-19 00:37:51 +08:00 via Android
    连接数据库语句的 localhost 换成 127.0.0.1 应该就能搞定
    torbrowserbridge
        3
    torbrowserbridge  
       2018-07-19 00:47:53 +08:00 via Android
    @tonylau 搞定个毛都说了是 rds
    yangqi
        4
    yangqi  
       2018-07-19 00:52:45 +08:00
    最大连接数是服务器的还是 Mysql 的?另外 1000 的连接数在哪里看的。
    qiayue
        5
    qiayue  
    PRO
       2018-07-19 01:09:30 +08:00
    /t/465888 看看是不是 dns 问题
    tonylau
        6
    tonylau  
       2018-07-19 01:13:55 +08:00 via Android
    caola
        7
    caola  
       2018-07-19 02:01:22 +08:00
    排除连接上的问题,那就是你建立的连接数超过了数据库设定值或处理上限,
    或者你没有设置连接池,每次查询的连接闲置后不能及时释放,又导致无法新立连接,
    不过如果查询很大的,还是建议做一些缓存,比如 redis 来缓存部分查询频繁的内容
    torbrowserbridge
        8
    torbrowserbridge  
       2018-07-19 08:14:24 +08:00
    @tonylau 对不起,我戴上眼镜也没有看到和你这个链接有毛关系。都说了是 RDS,你家 RDS 和应用服务器是同一台机器?不然怎么会扯上 localhost 和 127.0.0.1 呢?再说了,这里是 AWS 你提供的是 Aliyun 的文档,几个意思到底。
    initialdp
        9
    initialdp  
       2018-07-19 08:36:38 +08:00
    RDS 那边如果已经允许了 5000 连接数,那问题多半还是在 php/apache 这边。您可以检查一下 apache 中的配置,比如这篇文章提到的参数配置:
    https://serverfault.com/questions/732612/php-apache-handle-1000-simultaneous-request
    如果是 Nginx,应该也有类似的参数配置。
    shuck
        10
    shuck  
       2018-07-19 09:39:50 +08:00
    php 使用结束 mysql 后 没有及时关闭数据库连接或者有很多慢 sql,导致连接无法释放,rds 的连接数是 5000,超过 5000 的连接后,后面的 sql 操作就会处于等待。检查慢 sql,优化代码
    floraX
        11
    floraX  
       2018-07-19 10:28:53 +08:00
    抛开问题,但是当连接数接近 1000 的时候
    这个时候,你还用 mysql 抗,秀逗?
    Immortal
        12
    Immortal  
       2018-07-19 10:49:56 +08:00
    其实我想说 mysql 连接数 1000 不是很正常么?也太小看 mysql 了
    jasondan
        13
    jasondan  
    OP
       2018-07-19 13:35:22 +08:00
    @yangqi 你好是 mysql 的
    jasondan
        14
    jasondan  
    OP
       2018-07-19 13:35:43 +08:00
    @qiayue dns 问题有坑的,我已经把 host 绑了,所以被我排除
    jasondan
        15
    jasondan  
    OP
       2018-07-19 13:36:28 +08:00
    @floraX 额,这个是跟业务有一定原因,不过在目前配置看来 1000 个连接不会出什么性能问题
    jasondan
        16
    jasondan  
    OP
       2018-07-19 13:37:22 +08:00
    @shuck 感谢回答,但是我的问题是处于数据库产生连接的时候爆出,但是连接数远远未达到界定值
    jasondan
        17
    jasondan  
    OP
       2018-07-19 13:38:53 +08:00
    @caola 闲置的这个问题,我考虑过,经过长时间观察不会这种问题出现,所以应该是另外一方面
    jasondan
        18
    jasondan  
    OP
       2018-07-19 13:42:13 +08:00
    @initialdp 感谢解答,我查看了下这里说的是 web 服务层面的并发控制问题,但是我的是 php client 向 RDS 服务单方面发起的请求。不过我会找找有没有相关类似的配置,可能跟你说的这个方向有类似
    xiaoxlm
        19
    xiaoxlm  
       2018-07-19 19:32:36 +08:00
    mysql 有相关的错误或者 warning 日志吗
    yangqi
        20
    yangqi  
       2018-07-19 21:24:09 +08:00
    @jasondan 闲置问题最有可能了,php 里面如果不直接关闭连接,php 结束后会释放资源,但 mysql 服务器上的连接不会马上断开,有个 wait_timeout 来控制多久断开闲置连接。所以根据描述这是最有可能的情况。
    jasondan
        21
    jasondan  
    OP
       2018-07-19 21:47:02 +08:00
    @xiaoxlm mysql 报错偶尔会出现 connection timed out,不过我检查过链接数远远未达到上限,由于是 RDS 实例,也就没有了 ulimit 这个说法,有见过类似情况么
    jasondan
        22
    jasondan  
    OP
       2018-09-08 10:31:45 +08:00
    这里回复下各位,经过与 AWS 的技术沟通,我发现 AWS rds 存在短连接数限制,当瞬间短链接塞满他们的 tcp 队列时,RDS 将会报出 connected time out,而这个时候 RDS 并不会有任何异常,没有任何负载问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     944 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:27 PVG 04:27 LAX 13:27 JFK 16:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86