検索
ホームページphp教程php手册PHP-FPM模式下可怕的 MongoDB-PHP-Driver 连接池无节制连接问题

PHP-FPM模式下可怕的 MongoDB-PHP-Driver 连接池无节制连接问题

Jun 13, 2016 am 10:54 AM
ngphp-fpm起こるモデルプール環境接続する質問

问题发生环境:

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

 

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。