2013-09-28 56 views
1

我有包含如下的地理字段的文档。MongoDB ensureIndex:由同级重置的连接

"geo" : { 
    "type" : "Point", 
    "coordinates" : [ 
     37.44609999, 
     -121.88355687 
    ] 
}, 

当我尝试将空间索引添加到这个集合,它想了一会儿,然后我得到一个错误。

db.data.ensureIndex({'geo.coordinates': '2dsphere'}) 

Sat Sep 28 17:49:33.451 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017 
Sat Sep 28 17:49:33.494 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:27017] 
Sat Sep 28 17:49:33.497 DBClientCursor::init call() failed 
Sat Sep 28 17:49:33.634 Error: error doing query: failed at src/mongo/shell/query.js:78 
Sat Sep 28 17:49:33.650 trying reconnect to 127.0.0.1:27017 
Sat Sep 28 17:49:33.654 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017 

任何想法为什么会发生这种情况?我怎样才能进一步调试呢?

+0

你能告诉我们你的MongoDB的版本? –

+0

根据db.serverStatus()我正在运行Mongo版本2.4.6。 我的操作系统是Ubuntu 12.04.2 LTS。 –

回答

2

所以我终于搞清楚了。我在Amazon EC2 Micro Instance上安装了Mongo。默认情况下,微型实例具有613MB的内存并且没有交换空间。

我试图创建的空间索引超过大约100万个文档。所以我的猜测是创建这个索引用完了所有可用的RAM,所以没有交换空间,Linux内核别无选择,只能杀死Mongo进程。

为那里的人有同样的问题的解决方案是按照这个教程http://cloudstory.in/2012/02/adding-swap-space-to-amazon-ec2-linux-micro-instance-to-increase-the-performance/

+0

有没有人知道如果发生此错误索引仍然正确创建? mongo服务看起来好像开始了,但是,索引确实好吗? –

+0

@JustinHelgerson我曾经有过类似的问题。后来由于奇怪的性能问题不得不重建索引 – Zarathustra