MongoDB 如何使用其各种线程的概述

Pet*_*rko 6 mongodb

在一个实例中,我使用了大约 85 个线程的 MongoDB。代替有时间直接调查,我很好奇:

  1. 螺纹是干什么用的?它们是否属于几个高级使用类别?
  2. 如何控制/影响使用的线程数?例如最大连接参数等。

小智 2

最大连接数通常是 ulimit 值的 %80,在大多数 Linux 发行版中默认为 1024。这将为您提供 819 个连接。可以通过更改 ulimit 值来更改它。

在 MongoDB 中,每个主机可以使用 10 个连接,这是通过MongoOptions.connectionsPerHost属性设置的。这些连接由内部连接池控制。它是线程安全的,您最多可以同时运行 ConnectionPerHost x 个threadsAllowedToBlockForConnectionMultiplier线程。threadsAllowedToBlockForConnectionMultiplier也可以更改,其默认值为 5。也就是说,默认情况下,一台主机可以同时运行 50 个线程。超过该值的线程将出现“Out of semaphores to get db connection”异常。

您可以根据需要适当更改MongoOptions.connectionsPerHostthreadsAllowedToBlockForConnectionMultiplier值。

如果您在 Web 应用程序上使用驱动程序,则应该将其用作单例类。不需要“打开连接->做一些工作->关闭连接”循环。只需声明一次全局连接(并在 servlet 的 init 方法中初始化)并在整个 Web 应用程序中使用它。