【问题标题】:SpringData does not close connections?Spring Data 不关闭连接?
【发布时间】:2013-09-05 15:46:38
【问题描述】:

自几周前部署我的应用以来,我遇到了一些问题!

我发现 Spring Data 在使用一段时间后会关闭 Mongo 并打印以下消息:

"desc": "不能调用某些东西:vdbmongo1/10.20.0.211:27017/V1;嵌套异常是 com.mongodb.MongoException$Network:不能调用某些东西:vdbmongo1/10.20.0.211:27017/V1 "

首先我们看到打开的文件太多了,我们使用了限制为 4096 的 debian 7。我们增加了这个数字并将所有打开的文件增加了一倍至 8192(如果我是对的,linux 中的连接是套接字,与文件相同,不是吗?)

增加该值会增加内存使用量,然后我们也增加了内存,但我们没有那么多可用内存并且虚拟机关闭。

最后,我们将 cron 服务设置为每 6 小时重新启动一次,同时我们试图找到一个解决方案,它现在似乎可以工作。

我的应用部署在 Debian 7 上运行的 tomcat 7.0.28 中。

这是我创建 mongo 实例的 xml 片段:

<!-- MongoDB host -->
<mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}" write-concern="SAFE">
     <mongo:options
         connections-per-host="40"
         threads-allowed-to-block-for-connection-multiplier="1500"
         connect-timeout="15000"
         auto-connect-retry="true"
         socket-timeout="60000"
         write-number="1"
         write-timeout="0"
         write-fsync="true"/>
</mongo:mongo>

我们今天早上重新启动了服务器,线程是这样发展的:

Time             Threads (files)          Connections           RAM
09:00:00          90                       4                      177
10:00:00          7371                   78                  411
10:35:00          12519                 106                 480
11:00:00          14375                 113                 485 
11:40:00          16616                 122                 490
12:00:00          22776                 144                 584
12:30:00          26544                 156                 594
13:00:00          30251                 167                 600
13:40:00          39179                 191                 827
14:00:00          44075                 203                 855
15:13:00          60491                 239                 891
15:41:00          61976                 242                 904
16:00:00          64491                 264                 931
16:10:00          68619                 255                 939
16:20:00          70200                 258                 971
16:30:00          73416                 264                 1123
16:45:00          73959                 265                 1130

当我看到 vdbmongo1 中的任何一个进程时,这 73959 个进程看起来像:

mongod  30859 32763  mongodb  327u   IPv4           1646841     0t0     TCP vdbmongo1:27017->vtomcat1:60329 (ESTABLISHED)
mongod  30859 32763  mongodb  328u   IPv4           1647673     0t0     TCP vdbmongo1:27017->vtomcat1:60330 (ESTABLISHED)
mongod  30859 32763  mongodb  329u   IPv4           1646867     0t0     TCP vdbmongo1:27017->vtomcat1:60650 (ESTABLISHED)
mongod  30859 32763  mongodb  330u   IPv4           1646913     0t0     TCP vdbmongo1:27017->vtomcat1:60762 (ESTABLISHED)
mongod  30859 32763  mongodb  331u   IPv4           1648224     0t0     TCP vdbmongo1:27017->vtomcat1:60962 (ESTABLISHED)
mongod  30859 32763  mongodb  332u   IPv4           1647197     0t0     TCP vdbmongo1:27017->vtomcat1:32923 (ESTABLISHED)

其中 vdbmongo1 是包含数据库的机器,vtomcat1 是部署 tomcat 的机器。

这是预期的行为吗?

【问题讨论】:

    标签: mongodb spring-mvc tomcat7 spring-data-mongodb


    【解决方案1】:

    是的,这是正常/预期的行为。

    MongoDB 将使用尽可能多的内存,因为它会将数据文件直接 mmap() 到内存中,并为每个连接使用内存(默认每个连接 1MB)

    【讨论】:

      【解决方案2】:

      似乎更新到最后一个 mongo 版本(2.4.8)解决了这个问题。现在我不能同时看到超过 15 到 20 个连接。

      【讨论】:

        猜你喜欢
        • 2021-11-19
        • 2020-08-30
        • 2019-07-14
        • 2023-01-30
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        相关资源
        最近更新 更多