自从几周前部署我的应用程序以来,我遇到了一些问题!
我发现 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 的机器。
这是预期的行为吗?