为什么mongodb日志显示打开的连接太多?它显示的不仅仅是数据库中的最大连接限制和当前操作数。
此外,我的主要人员在达到819限制后拒绝创建更多连接。那个时候,db中的当前操作数量少于819.提升ulimit暂时解决了我的问题,但为什么没有利用空闲连接来满足请求呢?
答案 0 :(得分: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个打开的连接,我就没有看到从客户端应用程序建立的任何更多连接。我正在运行副本集,因此您仍然可以看到正在关闭的内部连接。
答案 1 :(得分:0)
来自MongoDB文档:
“如果您在MongoDB日志中看到非常大量的连接和重新连接消息,则客户端经常连接并断开与MongoDB服务器的连接。这是不使用请求池的应用程序的正常行为,例如CGI考虑使用FastCGI,Apache模块或其他类型的持久应用程序服务器来减少连接开销。
如果这些连接不影响您的性能,您可以使用run-time quiet选项或命令行选项--quiet来禁止日志中的这些消息。“
答案 2 :(得分:0)
确保您使用的是mongodb的最新驱动程序。