Mongo 日志中的 SocketException

Mongo 日志中的 SocketException

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

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

我如何知道此错误的原因?这与代码问题还是管理员配置有关?

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

答案1

首先,请查看并按照此处概述的步骤进行操作:

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

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

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

最后,存在一些与不应该使用空闲连接相关的问题,这些问题也可能导致此类问题:

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

直到服务器-5632已完成,这里唯一的补救措施是通过重新启动 mongod/mongos 进程来刷新连接。

答案2

我通过在游标查询中添加 batchSize 选项参数来阻止这种情况发生

例如之前:

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

后:

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

这使得它运行得更顺畅(没有那么多的启动/停止),并且讨厌的消息也更少。事实上没有。

相关内容