当前位置: 首页 > 知识库问答 >
问题:

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

苏畅
2023-03-14

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

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

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

如果我在一个盒子里做netstat(我总共有5-8个盒子),我看到每个盒子总共有3Kmongo连接(一些在WAIT中,一些在ESTABLISHED中)。

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

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

这是我使用驱动程序html" target="_blank">调用客户端的方式:
$mongo=new MongoClient(
"host 1:11004, host 2:11004",数组(
'副本集'=

共有2个答案

牧宁
2023-03-14

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

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

我还需要确保下午好。请求\u终止\u超时时间不太小,因此工人不会经常被杀。

公西鸿博
2023-03-14

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

 类似资料:
  • 问题内容: 简而言之,是否有一些适合高使用率和服务器的产品,还是我需要坚持不懈地改进?如果是这样,为什么他们将其删除? 问题答案: PHP 5.3中引入了对此的支持。对于此之前的版本,PDO和–上帝禁止– mysql扩展是唯一的选择。 引用手册: 与mysql扩展不同,mysqli不提供单独的功能来打开持久连接。要打开持久连接,连接时必须在主机名前加p:。

  • “持久连接”特性允许利用一个单独的网络连接来运行本来需要多个连接的多个命令。 6.8.1.Open (打开连接) 原型:function Open () 打开到服务器的持久连接。 6.8.2.Close (关闭连接) 原型:function Close () 关闭先前打开的持久连接。

  • 我正在将堆栈转换为K8S。数据库需要持久存储。 我使用了 pv.yaml(根据@Whites11的回答进行了编辑): 我进入GUI上的PVC页面,并手动向索赔添加了一个卷(基于@Whites11的反馈)。我可以看到PVC已经更新了体积,但它仍然悬而未决。 意识到自从进行@Whites11建议的更改后,pod中的原始错误消息已经更改。现在是“persistentvolume”pvvolume“not

  • 问题内容: 我有一个使用JDBC连接到MySQL的应用程序。在某些情况下,JDBC连接空闲数小时(甚至几天),并且失去与MySQL的连接,然后尝试执行查询时除外。最好的解决方案是什么? 问题答案: 保持连接打开时间不足是一个坏习惯。当数据库打开时间过长时,它将强制关闭。您应该编写JDBC代码,以便它总是在您获取它们的同一块块中关闭连接(以及语句和结果集),以防止这样的资源泄漏。 但是,获取每个连接

  • 问题内容: 我在apache和mod_wsgi和PostgreSQL中使用django(都在同一主机上),并且我需要处理很多简单的动态页面请求(每秒数百个)。我面临的问题是,瓶颈是django没有持久的数据库连接,并在每个请求上重新连接(大约需要5毫秒)。在进行基准测试时,我得到了持久连接,我可以处理近500 r / s,而没有连接时,我只能得到50 r / s。 有人有什么建议吗?如何修改Dja

  • 问题内容: 我的Node Web应用程序需要一个持久的MySQL连接。问题是每天大约发生几次这种情况: 这是我的连接代码: 如您所见,handleDisconnect代码不起作用。 问题答案: 使用mysql连接池。当连接断开时它将重新连接,您将获得额外的好处,即能够同时进行多个sql查询。如果您不使用数据库池,则您的应用将在等待当前运行的数据库请求完成时阻止数据库请求。 我通常定义一个数据库模块