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

2018-07-18 23:42:48 +08:00
 jasondan

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

5045 次点击
所在节点    PHP
22 条回复
HanSonJ
2018-07-19 00:03:25 +08:00
看看是不是有 SQL 执行时间久占用资源
tonylau
2018-07-19 00:37:51 +08:00
连接数据库语句的 localhost 换成 127.0.0.1 应该就能搞定
torbrowserbridge
2018-07-19 00:47:53 +08:00
@tonylau 搞定个毛都说了是 rds
yangqi
2018-07-19 00:52:45 +08:00
最大连接数是服务器的还是 Mysql 的?另外 1000 的连接数在哪里看的。
qiayue
2018-07-19 01:09:30 +08:00
/t/465888 看看是不是 dns 问题
tonylau
2018-07-19 01:13:55 +08:00
caola
2018-07-19 02:01:22 +08:00
排除连接上的问题,那就是你建立的连接数超过了数据库设定值或处理上限,
或者你没有设置连接池,每次查询的连接闲置后不能及时释放,又导致无法新建立连接,
不过如果查询很大的,还是建议做一些缓存,比如 redis 来缓存部分查询频繁的内容
torbrowserbridge
2018-07-19 08:14:24 +08:00
@tonylau 对不起,我戴上眼镜也没有看到和你这个链接有毛关系。都说了是 RDS,你家 RDS 和应用服务器是同一台机器?不然怎么会扯上 localhost 和 127.0.0.1 呢?再说了,这里是 AWS 你提供的是 Aliyun 的文档,几个意思到底。
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
2018-07-19 09:39:50 +08:00
php 使用结束 mysql 后 没有及时关闭数据库连接或者有很多慢 sql,导致连接无法释放,rds 的连接数是 5000,超过 5000 的连接后,后面的 sql 操作就会处于等待。检查慢 sql,优化代码
floraX
2018-07-19 10:28:53 +08:00
抛开问题,但是当连接数接近 1000 的时候
这个时候,你还用 mysql 抗,秀逗?
Immortal
2018-07-19 10:49:56 +08:00
其实我想说 mysql 连接数 1000 不是很正常么?也太小看 mysql 了
jasondan
2018-07-19 13:35:22 +08:00
@yangqi 你好是 mysql 的
jasondan
2018-07-19 13:35:43 +08:00
@qiayue dns 问题有坑的,我已经把 host 绑了,所以被我排除
jasondan
2018-07-19 13:36:28 +08:00
@floraX 额,这个是跟业务有一定原因,不过在目前配置看来 1000 个连接不会出什么性能问题
jasondan
2018-07-19 13:37:22 +08:00
@shuck 感谢回答,但是我的问题是处于数据库产生连接的时候爆出,但是连接数远远未达到界定值
jasondan
2018-07-19 13:38:53 +08:00
@caola 闲置的这个问题,我考虑过,经过长时间观察不会这种问题出现,所以应该是另外一方面
jasondan
2018-07-19 13:42:13 +08:00
@initialdp 感谢解答,我查看了下这里说的是 web 服务层面的并发控制问题,但是我的是 php client 向 RDS 服务单方面发起的请求。不过我会找找有没有相关类似的配置,可能跟你说的这个方向有类似
xiaoxlm
2018-07-19 19:32:36 +08:00
mysql 有相关的错误或者 warning 日志吗
yangqi
2018-07-19 21:24:09 +08:00
@jasondan 闲置问题最有可能了,php 里面如果不直接关闭连接,php 结束后会释放资源,但 mysql 服务器上的连接不会马上断开,有个 wait_timeout 来控制多久断开闲置连接。所以根据描述这是最有可能的情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/472180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX