由于内存不足,mongod会自动关闭。 (Debian的)
~# reboot
~# mongo
MongoDB shell version: 2.0.6
connecting to: test
Thu Aug 2 13:12:26 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:8 4
exception: connect failed
~# mongo 127.0.0.1:27017
MongoDB shell version: 2.0.6
connecting to: 127.0.0.1:27017/test
> use database
> db.repairDatabase()
{
"errmsg" : "exception: file /var/lib/mongodb/$tmp_repairDatabase_0/datab ase.1 open/create failed in createPrivateMap (look in log for more information)" ,
"code" : 13636,
"ok" : 0
}
数据库工作正常,但我担心一周前我的基地会发生什么。我不得不完全重新安装mongodb。 link
UPD:
只是增加了服务器上的RAM大小并执行了3Gb db.repairDatabase() - 一切顺利。
问题在于缺乏记忆力。 (内存映射文件) 没有启动mongod - 占用了136Kb的内存。 启动mongod后 - 1100Kb内存被占用。 在我的数据库对象1165916中。 创建对象越大,占用的内存就越多。 如何减少mongodb内存的消耗?或唯一的出路 - 更多的记忆?
答案 0 :(得分:2)
我认为这和你以前的问题有着相同的根本原因 - 缺乏资源。您在上一条消息中指出您只有~1.4GB的内存,在这种情况下,当您分配了更多内存时,修复成功。修复必须遍历并重写整个数据集,因此它将是密集的。
有关MongoDB如何在此处使用内存的详细说明:
http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage
不要忘记,RAM中的工作集包括索引和数据,因此不仅仅是对象数量的问题。
如果您的工作数据集大部分时间都适合1.4GB,那么您可能不需要额外的RAM,但是,当它超过这些限制时,您将不得不配置一些交换(以避免OOM杀手和其他问题 - 有关更多信息,请参阅here和here。在不增加RAM的情况下,准备好这样的使用也非常慢。在上一期中,您没有配置交换 - 如果您执行的操作消耗了所有可用内存(例如修复),则不会使操作系统无处可去。
关于初始连接失败,我认为如果没有指定参数,默认情况下可能会尝试连接localhost:27017(而不是IP) - 你的/etc/hosts
文件是否有可能返回IPV6地址或类似的东西。如果尝试手动连接到localhost,是否会失败?
答案 1 :(得分:0)