什么导致SocketException(9001)在node.js app和MongoDB ReplicaSet中处理请求?

我有一个简单的node.js应用程序,使一个调用连接调用到我的副本集。 事情今天早些时候工作正常,应用程序没有任何改变,现在我的连接失败(默默),我在我的mongod日志中看到以下内容。

Thu Apr 18 17:16:56 [conn1782026] end connection 10.xxx:50720 (40 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50721 #1782027 (41 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50722 #1782028 (42 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50723 #1782029 (43 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50724 #1782030 (44 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50725 #1782031 (45 connections now open) Thu Apr 18 17:16:57 [initandlisten] connection accepted from 10.xxx:50736 #1782032 (46 connections now open) [conn1782028] SocketException handling request, closing client connection: 9001 socket exception [2] server [10.xxx:50722] 

我一直无法find是什么原因或如何解决这个问题。

这是我的连接代码:

 var _ = require("underscore"); var db_options = { db:{ w:1, native_parser: false }, server:{ auto_reconnect:true, socketOptions: {} }, replSet:{ rs_name: "my_replset_name", readPreference: "secondary" }, mongos: {} }; db.client.connect("mongodb://server1:27017,server2:27017,server3:27017/my_database", db_options, function(err, _db){ if(err){ console.log(err); }else{ _db.collection("my_collection", function(err, collection){ collection.find({q:1}).toArray(function(err,item){ if(err){ console.log(err); }else{ _.each(item, function(r){ if(!_.isEmpty(r)){ // do something with this item! console.log(r._id); } }); console.log("Finished."); } }); }); } }); 

我正在EC2上运行我的ReplicaSet,一切都可以成功地连接到对方,有一个简单的node.js应用程序,可以对我的ReplicaSet进行单个调用连接调用 – 就像我说的,这个工作,然后停止工作,恕不另行通知。

有没有人有任何见解呢? 是什么造成的? 如何预防呢? 如何解决它?

如果您的操作系统是rhel5.x ,则默认系统参数
net.ipv4.tcp_mem=196608 262144 393216
将其更改为:
net.ipv4.tcp_mem=786432 1048576 1572864

4k(每页)* 1572864(页)= 6G(最大tcp内存),默认为1.5G