首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP54+ Nginx + PHPFPM + MongoDB中的持久连接或连接池

PHP54+ Nginx + PHPFPM + MongoDB中的持久连接或连接池
EN

Stack Overflow用户
提问于 2013-07-25 00:39:35
回答 2查看 2.2K关注 0票数 0

我使用的是pecl mongo 1.4.x驱动程序(http://pecl.php.net/package/mongo/1.4.1),设置在标题中提到的中等流量服务(每分钟5K- 10K请求)。

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

这会严重影响性能(锁定率上升,内存管理不能很好地执行)

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

我的问题是如何减少连接到mongoDB的数量,如何正确地建立持久连接?

似乎PECL mongoDB驱动程序中的持久连接工作方式从1.2到1.3都发生了变化,在1.4中的表现略有不同。

下面是我使用驱动程序调用客户端的方法:

代码语言:javascript
复制
$mongo = new MongoClient(
代码语言:javascript
复制
"host1:11004,host2:11004", array(
代码语言:javascript
复制
'replicaSet' => MG\_REPLICASET,
代码语言:javascript
复制
'password'=>"superpasswd",
代码语言:javascript
复制
'username'=>"myuser",
代码语言:javascript
复制
'db'=>"mydb",
代码语言:javascript
复制
'journal' => true,
代码语言:javascript
复制
"readPreference"=> MongoClient::RP\_SECONDARY\_PREFERRED
代码语言:javascript
复制
)    );
EN

回答 2

Stack Overflow用户

发布于 2013-07-25 01:05:26

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

票数 3
EN

Stack Overflow用户

发布于 2013-07-30 13:39:12

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

我们需要设置PHP_FCGI_MAX_REQUESTS (或pmphp-fpm中的max_requests )设置为一个更大的数字,因此该进程不会频繁地循环使用。

此外,我还需要确保pm.request_terminate_timeout不会太小,这样工人就不会经常被杀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17839962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档