PHP-FPM模式下可怕的 MongoDB-PHP-Driver 连接池无节制连接问题
问题发生环境:
Nginx
PHP 5.3.10 as php-fpm extension to nginx
mongodb-php-driver 1.2.12
MongoDB 2.2
此问题是 MongoDB PHP Driver 1.2.x 的官方特性导致的,描述请看 PHP-202 和 PHP-347 。简单地说,PHP-FPM模式下,每一个 PHP Worker 进程都有自己独立的 mongodb 连接池,从而导致连接数极易超标,内存数也随之倍增。
一,PHP服务背景:
某个 Web 应用是通过 Nginx+factcgi 运行的 PHP 程序提供服务的。
PHP-FPM的最大子进程数,是通过 php-fpm.conf 的 max_children 参数设置的(或pm=dynamic时由 spare_servers+start_servers 参数综合决定)。这个值曾被设置为512 。
二,MongoDB服务背景:
mongodb 实例的最大连接数限制可以通过启动参数中的 maxConns 设置:
maxConns:默认值取决于系统的限制(如 ulimit 和 file descriptor)。如果没设置这个参数, mongodb 自己不会限制连接数。但,你不能设置超过 20,000 。
一般不刻意设置 maxConns 参数。
三,MongoDB PHP Driver 的可怕连接池特性(BUG?)
MongoDB 官方提供的 mongodb-php-driver 在 1.3.0 以下版本(1.2.0~1.2.1x),拥有一个可怕的连接池实现方案,在执行任何查询时,都会从连接池中请求一个连接,完成之后再归还给连接池。这里的完成是指持有该连接的变量离开了它的作用域。www.2cto.com
PHP-FPM模式下,一个 PHP Web 应用能对 MongoDB instance 建立的并发连接数计算方式如下:
进程数:max-children = 512 ,那么是 512 个进程;
一个MongoDB实例对应一个连接池:主站配置了165和166两个副本集实例;
连接池中的连接数:mongodb-php-driver 对此不做任何限制,可以无限增加直到句柄耗尽为止。
——————郑昀:此计算方式出自 mongo.connecting.pools ——————
根据 mongodb 官方文档说明,虽然连接数无限增长理论上是有可能的,但实际观测发现,一个 Web Server 与一个 mongodb 实例的连接数通常会稳定在一个值上,不会有太大的起伏 。
那么,假设一个 PHP Web 应用向 mongodb-165 发起的连接数为 :
750 个,
该 MongoDB 实例为此需要维护的内存数至少为:
750 × 默认10MB = 7.5 GB

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

微信勿扰模式什么意思如今,随着智能手机的普及和移动互联网的迅猛发展,社交媒体平台已经成为人们日常生活中不可或缺的一部分。而微信作为国内最流行的社交媒体平台之一,几乎每个人都有一个微信账号。我们可以通过微信与朋友、家人、同事进行实时沟通,分享生活中的点滴,了解彼此的近况。然而,在这个时代,我们也不可避免地面临着信息过载和隐私泄露的问题,特别是对于那些需要专注或

Windows恢复环境(WinRE)是用于修复Windows操作系统错误的环境。进入WinRE后,您可以执行系统还原、出厂重置、卸载更新等操作。如果无法引导到WinRE,本文将指导您使用修复程序解决此问题。无法引导到Windows恢复环境如果无法引导至Windows恢复环境,请使用下面提供的修复程序:检查Windows恢复环境的状态使用其他方法进入Windows恢复环境您是否意外删除了Windows恢复分区?执行Windows的就地升级或全新安装下面,我们已经详细解释了所有这些修复。1]检查Wi

keep体脂秤怎么连接?keep是有专门设计的体脂秤,但是多数的用户不知道如何连接keep的体脂秤,接下来就是小编为用户带来的keep体脂秤连接方法图文教程,感兴趣的用户快来一起看看吧!keep体脂秤怎么连接1、首先打开keep软件,进入到主页面点击右下角【我的】选择其中的【智能硬件】;2、然后在我的智能设备页面,中间【添加设备】按钮;3、之后在选择你要添加的设备界面,选择【智能体脂/体重秤】;4、接着在选择设备型号页面,点击【keep体脂秤】选项;5、最后在下图所示的界面,最底部的【立即添加】

大家在使用Edge浏览器访问网页的时候,有遇到提示你的连接不是专用连接,导致网页浏览失败的情况吗?这是怎么回事?很多小伙伴遇到这种问题都不知道如何处理,可以看看下面三个解决办法。 方法一(简单粗暴):在edge浏览器中,您可以通过进入设置并关闭安全性功能,然后在网站权限中阻止位置权限来尝试解决原先报错的网站无法访问的问题。需要注意的是,这种方法的有效性和持续时间可能会有所不同,无法确定具体的效果。重新启动浏览器后,您可以尝试访问该网站,看看是否问题得到解决。 方法二: 调整键盘为英文输

Win10连接网络受限制解决办法随着科技的快速发展,网络已经成为了人们生活中不可或缺的一部分。然而,有时我们在使用Windows10操作系统的电脑连接网络时可能会遇到一些问题,其中之一就是连接受限制。这种情况下,我们无法正常访问网页、下载文件或者使用网络功能。那么,有什么办法能够解决这个问题呢?本文将为您介绍几种常见的解决办法。一、检查网络连接设置首先,我

即使在“请勿打扰”模式下接听电话也可能是一种非常烦人的体验。顾名思义,请勿打扰模式可关闭来自邮件、消息等的所有来电通知和警报。您可以按照这些解决方案集进行修复。修复1–启用对焦模式在手机上启用对焦模式。步骤1–从顶部向下滑动以访问控制中心。步骤2–接下来,在手机上启用“对焦模式”。专注模式可在手机上启用“请勿打扰”模式。它不会让您的手机上出现任何来电提醒。修复2–更改对焦模式设置如果对焦模式设置中存在一些问题,则应进行修复。步骤1–打开您的iPhone设置窗口。步骤2–接下来,打开“对焦”模式设

随着数字化时代的发展,共享打印机成为现代办公环境中不可或缺的一部分。然而,有时我们可能会遇到共享打印机无法连接到打印机的问题,这不仅会影响工作效率,还会带来一系列麻烦。本文旨在探讨共享打印机无法连接到打印机的原因和解决方法。共享打印机无法连接到打印机的原因有很多,其中最常见的原因是网络问题。如果共享打印机与打印机之间的网络连接不稳定或中断,那么就无法进行正常

1、将耳机放在耳机盒中并保持盖子打开,长按盒子上的按键使耳机进入进入配对状态。2、打开手表音乐功能并选择蓝牙耳机,或在手表设置功能选择蓝牙耳机。3、在手表选择该耳机即可配对成功。
