为什么mongodb日志显示打开的连接太多?它向我显示了超过最大连接限制和 db 中当前操作的数量。
此外,我的主要在达到 819 限制后拒绝创建更多连接。那个时候db当前的操作数少于819。提高ulimit暂时解决了我的问题,但是为什么没有利用空闲连接来服务请求呢?
为什么mongodb日志显示打开的连接太多?它向我显示了超过最大连接限制和 db 中当前操作的数量。
此外,我的主要在达到 819 限制后拒绝创建更多连接。那个时候db当前的操作数少于819。提高ulimit暂时解决了我的问题,但是为什么没有利用空闲连接来服务请求呢?
我遇到了同样的问题。我的连接数一直在增长,直到达到 819,然后不再允许连接。
我正在使用 mongo-java-driver 版本 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 日志中看到大量的连接和重新连接消息,则表明客户端频繁地连接和断开与 MongoDB 服务器的连接。这对于不使用请求池的应用程序(例如 CGI)来说是正常行为。考虑使用FastCGI、Apache 模块或其他类型的持久应用程序服务器,以减少连接开销。
如果这些连接不影响您的性能,您可以使用运行时安静选项或命令行选项 --quiet 从日志中抑制这些消息。”
确保您使用的是最新的 mongodb 驱动程序。