在Mongo日志中的SocketException

到目前为止我们已经跑了4个月了,但是最近我看到很多了

SocketException handling request, closing client connection: 9001 socket exception [2] server [127.0.0.1:58996]

我怎么知道这个错误的原因? 它与代码问题或pipe理员configuration有关吗?

我们有Fedora 16服务器,mongo版本2.0.7

首先,看一看,并按照这里列出的步骤:

http://www.mongodb.org/display/DOCS/Troubleshooting#Troubleshooting-Socketerrorsinshardedclustersandreplicasets

接下来,查看目标主机上的任何ulimit问题(新套接字需要新的文件描述符,并可能导致错误):

http://www.mongodb.org/display/DOCS/Too+Many+Open+Files

最后,还有一些问题涉及空闲连接的使用时,他们不应该,也可以造成这种types的问题:

https://jira.mongodb.org/browse/SERVER-5793

在SERVER-5632完成之前,这里唯一的补救措施是通过重新启动mongod / mongos进程来刷新连接。

我通过在我的游标查询中添加一个batchSize选项arg来阻止这种情况的发生

例如之前:

 var cursor = db.collection('images').find( {}, {"_id": 1} ).sort({"_id": 1}); 

后:

 var cursor = db.collection('images').find( {}, {"_id": 1} ).sort({"_id": 1}).batchSize(1000); 

这使得它运行更平滑(没有更多的启动/停止),并且使用更less的恶意消息。 事实上没有。