PHP的持久性连接不重用(打开多个连接每个FPM工作人员)

我在testing从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()); 

我的设置是:

  • 操作系统:CentOS 7.3
  • PHP / 7.1.18
  • PHP-FPM
  • nginx的/ 1.10.2
  • MySQL的,30年6月5日

我试图用ab做一些请求:

 $ ab -c 100 -n 500 http://mysite/my_test_script.php 

PHP-FPM被configuration为有150名员工准备好了,我看到了我期待的150个与mysqlbuild立了连接,并在ab完成后保持打开状态。 我再次启动了ab,行为仍然是相同的,150个连接,没有新的连接打开。 一切都好。 然后我创build了一个脚本,做了相同的确切请求,相同的IP,相同的HTTP头,但用curl来作出请求,BOOM我有300个连接在mysql而不是150.我再次启动脚本,我还有300连接。 相同脚本的后续运行不会增加连接数量。 有没有人遇到过这样的事情? 有谁知道什么可以使PHP打开更多的连接比需要? 我错过了什么明显的?

如果不清楚我在问什么,请在下面评论,我会尽量改善我的解释问题。

PS我也试过这与PDO,同样的行为。

编辑:我的testing哪里不准确

进一步testing后,我注意到我的第一个testing不准确。 我在一个多租户环境和不同的连接(不同的架构),当我启动ab时初始化。 在我的情况下,PHP的文档有点误导,它说:

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

http://php.net/manual/en/features.persistent-connections.php

也许它对我来说很明显,我不知道,这不适合我。 将第四个parameter passing给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()); 

应用程序开始按照我的预期工作,每个工作人员一个连接。