MongoDB的连接太多

时间:2015-09-04 11:45:05

标签: mongodb grails

我正在使用grails处理MongoDB。当我运行“mongod”命令时,它给了我135左右的连接数,但仍然可以连接。

如何才能获得一个连接。

对我有益的任何帮助。

1 个答案:

答案 0 :(得分:0)

TL;博士

MongoDB的每个驱动程序都维护一个连接池,以防止三次握手的开销。你看到的是预期的行为。

更详细一点。

假设您有一个显示所有笔记的网页。调用控制器后,您将查询请求用户的所有注释并使用GSP显示它。现在,您有两个并发用户的图像。如果您只有一个连接,则其中一个必须等​​到返回其他用户的结果。在谈到两个并发用户时,获得的延迟并不多。但现在想象你有100或1000个并发用户......他们会永远等待,甚至可能会遇到超时。

好的,现在我们已经同意为什么我们需要多个连接,让我们找出它们为什么那么多。打开套接字连接时,会发生一些事情。基本上,人们可以像这样转录它

  

C:嗨,服务器!

     

S:嗨,客户!

     C:哦,你在跟我说话!酷!

     

S:是的,我是MongoDB服务器,版本3.0!

     C:太棒了,就是我想要的!你能告诉我你的身份吗?

     S:好的!我是名为“replSet”的副本集的辅助节点,主节点在192.168.0.1上,另一个节点在192.168.0.100上找到

     C:Darn,需要和小学生交谈!但是,让我们保持联系!

     S:好的!如果你需要我,会在这里!

现在,客户端将打开与主服务器的连接,并且几乎相同的情况发生,只有当服务器将自己标识为主服务器时,两者才开始交换文档。即使我们有一个独立的服务器,这个过程也需要一段时间。不久,但它会增加延迟,无缘无故地提供答案。无论是在服务器端还是在客户端,建立的连接都很便宜。对于服务器,它略微超过一兆字节,在客户端,它不应超过几千字节的RAM。因此,通过预先分配的连接,您可以节省时间,从而以一小部分RAM为代价提供更好的性能。

如果使用了所有连接会怎样?

通常,只建立最大可能连接的一小部分。如果剩下一定数量的连接,则建立几个新连接。这种情况一直持续下去。如果有多个连接是免费的,那么一些连接会被拆除。在某些情况下,所有可能的连接都已建立。如果发出更多请求,则单个请求必须等到释放连接。

您可以通过发布

找出可以建立的连接数
db.serverStatus()

在命令行上。 connections字段显示您拥有的当前和可用连接数。