让我简要解释一下我的问题 .
架构(针对问题)如下:
-
1 Ubuntu 16.04与Apache 2.4服务器; php-fpm 7.2和Laravel
-
1 Ubuntu 16.04与MariaDB v.15.2 distrib 10.2.14服务器
从几天开始的问题是Web服务器抛出此错误:
SQLSTATE [HY000] [2002]无法分配请求的地址
到目前为止我发现了什么:
在MariaDB上
- ~30-40并发连接
netstat -nat | awk'{print $ 6}'|排序| uniq -c |排序-n
- 显示 TIME_WAIT 状态下的平均~800-900个连接
到目前为止,一切看似合法但在Apache服务器上的调查结果如下:
netstat -nat | awk'{print $ 6}'|排序| uniq -c |排序-n
TIME_WAIT状态下的
- ~10-12k连接
当他们得到> 28k时,我收到上述错误 . 昨天's because the server has ~28k free ports. (range 32768 - 61000). I'已将范围更改为10000 - 63000,并且我已将等待TIME_WAIT状态更改为5秒,到目前为止错误已停止 . 但这不是问题的根本原因 .
我想到的问题是:
-
php PDO是否为每个用户启动数据库连接,并为每个DB查询打开TCP连接并重用创建的数据库连接?如果这是真的,是否可以在没有其他Web服务器的情况下解决此问题?
-
为什么以及如何在Apache和MariaDB上的TIME_WAIT状态中的连接之间存在如此大的差异?是否是PDO问题没有正确关闭连接?
提前致谢 .
P.S . :与MariaDB的连接并不持久