Mongodb PHP54+中的持久连接或连接池;Nginx+;PHPFPM&x2B;蒙哥达

Mongodb PHP54+中的持久连接或连接池;Nginx+;PHPFPM&x2B;蒙哥达,mongodb,connection-pooling,php,pecl,Mongodb,Connection Pooling,Php,Pecl,我使用的是pecl mongo 1.4.x driver(),标题中提到的设置是中等流量服务(每分钟5K-10K请求) 我发现,在mongoDB中,Auth命令占用大量流量,连接请求速率大约为每秒30-50 这会严重影响性能(锁定率高,内存管理不好) 如果我在一个盒子中使用netstat(我总共有5-8个盒子),我会看到每个盒子中总共有2-3K mongo连接(一些在等待中,一些在建立中) 我的问题是如何减少与mongoDB的连接,如何正确设置持久连接 从1.2版到1.3版,PECL mongo

我使用的是pecl mongo 1.4.x driver(),标题中提到的设置是中等流量服务(每分钟5K-10K请求)

我发现,在mongoDB中,Auth命令占用大量流量,连接请求速率大约为每秒30-50

这会严重影响性能(锁定率高,内存管理不好)

如果我在一个盒子中使用netstat(我总共有5-8个盒子),我会看到每个盒子中总共有2-3K mongo连接(一些在等待中,一些在建立中)

我的问题是如何减少与mongoDB的连接,如何正确设置持久连接

从1.2版到1.3版,PECL mongoDB驱动程序中持久连接的工作方式似乎一直在改变,并且在1.4版中的性能略有不同

以下是使用驱动程序调用客户端的方法:
$mongo=新的MongoClient(
“host1:11004,host2:11004”,数组(
“复制集”=>MG\U复制集,
“密码”=>“超级密码”,
“用户名”=>“我的用户”,
“db”=>“mydb”,
“日记账”=>true,
“readPreference”=>MongoClient::RP_SECONDARY_PREFERRED
)
);

在1.4版本中,所有连接都是持久的,除非您自己关闭它们-您永远不应该这样做。您将看到来自每个PHP处理单元的每个IP/用户名/密码/数据库组合的连接。在您的情况下,按照每个PHPFPM流程。为了减少连接数量,您需要更少的用户名/密码/数据库组合。然而,在您的replicaset中,有8个框、50个FPM进程和3个节点,您已经拥有1200个连接—甚至没有考虑数据库/用户名/密码的差异。对此你无能为力,但它不应该对性能有太大影响。您更有可能遇到RAM/慢速磁盘限制。

在1.4版本中,所有连接都是持久的,除非您自己关闭它们-您永远不应该这样做。您将看到来自每个PHP处理单元的每个IP/用户名/密码/数据库组合的连接。在您的情况下,按照每个PHPFPM流程。为了减少连接数量,您需要更少的用户名/密码/数据库组合。然而,在您的replicaset中,有8个框、50个FPM进程和3个节点,您已经拥有1200个连接—甚至没有考虑数据库/用户名/密码的差异。对此你无能为力,但它不应该对性能有太大影响。您更有可能遇到RAM/慢速磁盘限制。

我想我找到了一个解决方案,可以避免过度的mongo连接请求

我们需要将PHP_FCGI_MAX_请求(或PHP fpm中的pm.MAX_请求)设置为一个更大的数字,这样流程就不会经常循环使用


此外,我还需要确保pm.request\u terminate\u超时时间不太小,这样工人就不会经常被杀。

我想我找到了一个解决方案来避免过度的mongo连接请求

我们需要将PHP_FCGI_MAX_请求(或PHP fpm中的pm.MAX_请求)设置为一个更大的数字,这样流程就不会经常循环使用


另外,我需要确保pm.request\u terminate\u超时时间不太小,这样工人就不会经常被杀。

我看不到有人指示你做什么,是的,建立连接是一项相当重要的工作,此外,默认情况下,连接应该是持久的,因此我不确定您的连接是如何/是否处于GCE状态的。由于超时限制很小,很多等待状态的连接似乎都处于GCE状态。工作人员经常被杀。我看不到你得到指令去做事情的地方,是的,建立连接是一项相当重要的工作,而且默认情况下连接应该是持久的,所以我不确定你的连接是如何/是否被GCD连接的。由于超时限制很小,很多等待状态连接似乎都是存在的。工人们经常被杀。