关于php mongodb的最大连接数

技术分享 · Fecmall · 于 6年前 发布 · 6515 次阅读

使用php mongodb扩展,默认是没有限制的(直接到最大连接数),

长连接会一直创建,譬如我的测试服务器,并发并不高,但是创建的连接数还是很多的。

因此,我们要在配置中限制一下最大的连接数

vim /etc/mongod.conf

net:
  port: 27017
  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on all interfaces.
  maxIncomingConnections: 50

maxIncomingConnections : 用来设置最大的连接数,关于这个参数的说明参看:

https://docs.mongodb.com/manual/reference/configuration-options/index.html#net-options

50就是设置的连接数,这个连接数要大于您的php-fpm,然后限制这个数即可,因为创建一个长连接都是要消耗内存的。

mongodb-php driver 版本号 >= 1.3.2,不然会出现下面的问题: https://www.cnblogs.com/zhengyun_ustc/archive/2013/01/15/mogodb-php-driver.html

对于mongodb,是自带连接池的,参看: https://docs.mongodb.com/manual/reference/connection-string/#connection-pool-options

但是php 不支持,打开这个链接参看截图: http://php.net/manual/en/mongodb-driver-manager.construct.php

共收到 7 条回复
Fecmall#16年前 0 个赞

阿里云的好像有问题: https://bbs.aliyun.com/read/283922.html

dionyang#26年前 0 个赞

@Terry #1楼 了解过了 阿里云的mongodb副本集自带replicaSet,应该使用如下URI连接:

mongo://user:password@host1:port1,host2:port2/database?replicaSet=xxx&maxPoolSize=1

这里maxPoolSize指的是一个客户端的连接池大小。这里我以一个请求占用一个php-fpm的worker计算,maxPoolSize就设置为1了。

关于replicaSet可以参考这篇文章:http://www.cnblogs.com/yaoxing/p/mongodb-replica-set.html

Fecmall#36年前 0 个赞

@dionyang [#2楼](#comment2) 你看我的正文截图,php不支持 maxPoolSize

下面是mongodb的参数部分说明:

Fecmall#46年前 0 个赞

@dionyang [#2楼](#comment2) 你用php测试过吗?麻袋理财那哥们一会就不够用了,不知道咋解决呢。

如果不用云mongodb,用阿里云ECS自己安装mongodb就没事了,设置一下就可以了

dionyang#56年前 1 个赞

@Terry [#4楼](#comment4)

简单说就是阿里云的芒果服务限制连接数1000。php服务器的进程数超了这个数字。导致连接数占满。导致报错

启用replicaSet仅启到主备作用。无法分担连接数。(主从库连接数相同)

php mongodb扩展不支持URI中的maxPoolSize php-fpm1子进程产生1 mongo TCP连接 进程存在时不释放。超过时会造成连接数占满

mongo服务不建议使用短链接

因此减少分配给该项目的php-fpm进程数。以此稳定mongo的连接数

另外不是很清楚yii\mongodb\Connection中关闭连接的方法是否能真正关闭连接,看上去只是reset了几个属性。 line:378

    /**
     * Closes the currently active DB connection.
     * It does nothing if the connection is already closed.
     */
    public function close()
    {
        if ($this->manager !== null) {
            Yii::trace('Closing MongoDB connection: ' . $this->dsn, __METHOD__);
            $this->manager = null;
            foreach ($this->_databases as $database) {
                $database->clearCollections();
            }
            $this->_databases = [];
        }
    }
Andrew#65年前 0 个赞

关于阿里云MongoDB超过最大连接数的问题,现在有什么解决方案吗?

Fecmall#75年前 0 个赞

你的php-fpm个数不要超过mongodb的最大连接数,应该就没有问题

譬如你的阿里云的mongodb的最大连接数是1000,那么你的所有连接这个mongodb的php-fpm个数不要超过1000. 否则就会出现连接数问题。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics