让我简要解释一下我的问题 .

架构(针对问题)如下:

  • 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的连接并不持久