php-mongdb 连接无法释放问题

在使用php7的生产环境中遇到MongoDB连接数量飙升,遇到了连接释放不掉的问题,在编写代码时并未使用长连接,排查后得知,在php5.6版本使用的客户端为MongoClient,该客户端是支持在创建连接的时候传入persistent参数指定连接方式是长连接还是短链接。因此在php-fpm运行模式的情况下可以控制连接的释放。php7版本中推出了新的连接客户端MongoDB\Driver\Manager,而目前的主流框架中都是用了这个客户端,该客户端不再支持连接控制,驱动底层默认采用长连接的方式(可能是为了查询效率)。因此,在代码中释放连接句柄并不能真正关闭连接,这就导致开启多少php-fpm进程就会有多少个mongo连接,出现mongo连接资源耗尽的问题。

解决办法:
1、自建mongodb连接池或使用三方连接代理
2、通过重启php-fpm work进程释放mongo连接

我直接采用了第2种方式,php-fpm提供了**【pm.max_requests】**(默认值0表示不会重新启动)选项来控制单个php-fpm work进程处理的最大请求数量,当达到设置的数量后,php-fpm master会重启该work进程。这个选项的目的是防止一些三方库出现的内存泄露问题。

pm.max_requests = 10
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值