Mongodb日志显示打开的连接太多

Mongodb日志显示打开的连接太多,mongodb,mongo-java,Mongodb,Mongo Java,为什么mongodb日志显示太多打开的连接?它显示了超过最大连接限制和当前操作数(以db为单位) 同时,我的主服务器在达到819限制后拒绝创建更多连接。当时,以db为单位的当前操作数不到819。提升ulimit暂时解决了我的问题,但为什么没有使用空闲连接来服务请求?来自MongoDB文档: “如果您在MongoDB日志中看到大量连接和重新连接消息,则客户端会频繁地连接和断开与MongoDB服务器的连接。这是不使用请求池的应用程序(如CGI)的正常行为。考虑使用FASCGI、Apache模块或其他

为什么mongodb日志显示太多打开的连接?它显示了超过最大连接限制和当前操作数(以db为单位)


同时,我的主服务器在达到819限制后拒绝创建更多连接。当时,以db为单位的当前操作数不到819。提升ulimit暂时解决了我的问题,但为什么没有使用空闲连接来服务请求?

来自MongoDB文档:

“如果您在MongoDB日志中看到大量连接和重新连接消息,则客户端会频繁地连接和断开与MongoDB服务器的连接。这是不使用请求池的应用程序(如CGI)的正常行为。考虑使用FASCGI、Apache模块或其他类型的持久应用服务器来减少连接开销。

如果这些连接不影响您的性能,您可以使用运行时安静选项或命令行选项--quiet从日志中抑制这些消息。”


我遇到了完全相同的问题。我的连接号码一直在增长,直到达到819,然后再也不允许连接了

我使用的是mongo java驱动程序版本2.11.3。似乎解决了这个问题的方法是显式设置MongoClient的connectionsPerHost和threadsAllowedToBlockForConnectionMultiplier属性。在此之前,我自己没有设置这些值,也没有接受默认值

MongoClientOptions mco = new MongoClientOptions.Builder()
    .connectionsPerHost(100)
    .threadsAllowedToBlockForConnectionMultiplier(10)
    .build();
MongoClient client = new MongoClient(addresses, mco); //addresses is a pre-populated List of ServerAddress objects
在我的应用程序中,MongoClient被定义为静态单例


我正在查看mongodb日志,当应用程序达到100个打开的连接时,我没有看到从客户端应用程序建立的更多连接。我正在运行一个副本集,因此您仍然可以看到正确关闭的内部连接。

确保您使用的是mongodb的最新驱动程序。

什么是mongodb库ou正在使用?这听起来像是没有正确地共享连接。你能描述一下你的MongoDB设置吗(复制副本,分片?)以及您正在运行的客户端的大小?另外,在客户端上设置的连接池大小是多少?这将全部考虑在内。关于ulimit,我建议您阅读MongoDB生产说明页面,以帮助正确设置您的环境(请参阅)我正在使用1个主设置和一个副本辅助设置。四个web应用程序正在使用java驱动程序2.11.2访问主应用程序。每个web应用程序都有connectionsPerHost=100和threadsAllowedToBlockForConnectionMultiplier=20。为什么我的主应用程序在819打开连接后拒绝连接,而当前操作数不少于819?为什么不在池中使用连接?这对我很有帮助。显然,如果您正在使用(我理解为通常建议的)静态单例模式为自己的应用程序共享一个Mongo客户端,那么这将指定到池的最大连接数。