到目前为止,我们已经运行了 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
首先,请查看并按照此处概述的步骤进行操作:
接下来,查找目标主机上的任何 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);
这使得它运行得更顺畅(没有那么多的启动/停止),并且讨厌的消息也更少。事实上没有。