3

为什么mongodb日志显示打开的连接太多?它向我显示了超过最大连接限制和 db 中当前操作的数量。

此外,我的主要在达到 819 限制后拒绝创建更多连接。那个时候db当前的操作数少于819。提高ulimit暂时解决了我的问题,但是为什么没有利用空闲连接来服务请求呢?

4

3 回答 3

2

我遇到了同样的问题。我的连接数一直在增长,直到达到 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 个打开的连接,我就没有看到从客户端应用程序建立的任何连接。我正在运行一个副本集,因此您仍然可以看到正在建立的内部连接正确关闭。

于 2013-10-09T20:45:02.597 回答
0

从 MongoDB 文档:

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

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

http://docs.mongodb.org/manual/faq/developers/#why-does-mongodb-log-so-many-connection-accepted-events

于 2013-08-01T05:51:32.073 回答
0

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

于 2015-10-12T19:02:25.267 回答