PHP mysql持久连接未重用(每个fpm工作程序打开多个连接)

PHP mysql持久连接未重用(每个fpm工作程序打开多个连接),php,mysql,curl,nginx,pdo,Php,Mysql,Curl,Nginx,Pdo,在测试从php到mysql的持久连接时,我遇到了一个非常奇怪的行为。我有一个小脚本,如下所示: <?php $db = new mysqli('p:db-host','user','pass','schema'); $res = $db->query('select * from users limit 1'); print_r($res->fetch_assoc()); PHP-FPM被配置为准备了150个工作人员,我看到了我所期望的,150个到mysq

在测试从php到mysql的持久连接时,我遇到了一个非常奇怪的行为。我有一个小脚本,如下所示:

<?php
   $db  = new mysqli('p:db-host','user','pass','schema');
   $res = $db->query('select * from users limit 1');
   print_r($res->fetch_assoc());
PHP-FPM被配置为准备了150个工作人员,我看到了我所期望的,150个到mysql的已建立连接,在ab完成后,mysql保持打开状态。我再次启动了ab,但行为还是一样,150个连接,没有新的连接。都很好。然后我创建了一个脚本,它执行相同的请求,相同的IP,相同的HTTP头,但使用curl进行请求,我在mysql上有300个连接,而不是150个。我再次启动了脚本,仍然有300个连接。相同脚本的后续运行不会增加连接数。有人遇到过这样的事情吗?有人知道什么可以让php打开比需要更多的连接吗?我错过了什么明显的东西吗

如果不清楚我在问什么,请在下面发表评论,我会尽力更好地解释我的问题

另外,我也用PDO试过了,同样的行为

编辑:我的测试不准确

经过进一步的测试,我发现我的第一次测试并不准确。我在一个多租户环境中,在启动ab时初始化了不同的连接(不同的模式)。在我的情况下,php文档有点误导,它说:

PHP检查是否已经有一个相同的持久连接(从前面开始保持打开状态),如果存在,则使用它。如果不存在,则创建链接。“相同”连接是使用相同用户名和密码(如果适用)打开到同一主机的连接

也许我对每个人都很明显,我不知道,这不是为了我。将第四个参数传递给MySqLi使PHP考虑连接<强>不相同。一旦我将代码更改为如下内容:

<?php
  $db  = new mysqli('p:db-host','user','pass');
  $db->select_db('schema');
  $res = $db->query('select * from users limit 1');
  print_r($res->fetch_assoc());

这里有一个家伙,我不知道你在说什么。在我的nodejs应用程序中,数据库连接是持久的,一切工作都足够快+连接是冗余的。那么,为什么持久连接是不好的,你能用真实的例子来解释吗@pjc89从这里您可以看到mysqli不提供持久连接功能,因此我建议使用mysqlnddriver:并阅读以下内容:感谢您添加更多详细信息。我忘了提到,我正在使用mysqlnd。顺便说一句,据我所知,mysqli确实支持持久连接,但它不会自动为您清理这些连接,因此建议使用msyqlnd,正如您所说。此外:由Raymond和Phalan添加的链接已经过时,请查看发布日期。2015年的最新发布日期。伙计们,你们真的认为在两年的时间里,技术处于领先地位,没有开发出解决方案吗?
<?php
  $db  = new mysqli('p:db-host','user','pass');
  $db->select_db('schema');
  $res = $db->query('select * from users limit 1');
  print_r($res->fetch_assoc());