3

由于内存不足,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
}
  1. Error: could't connect to server... 配置中的错误,不知道为什么?
  2. /var/lib/mongodb/$tmp_repairDatabase_0 和 /var/lib/mongodb/_tmp 是临时文件夹吗?我可以删除它们吗?

数据库工作正常,但我担心一周前会发生与我的基地相同的事情。我不得不完全重新安装 mongodb。关联

升级版:

只需增加服务器上的 RAM 大小并执行高达 3Gb 的 db.repairDatabase() - 一切顺利。

问题是内存不足。(内存映射文件)没有启动 mongod - 占用了 136Kb 的内存。启动 mongod 后 - 1100Kb 内存被占用。在我的数据库对象1165916。创建的对象越大,占用的内存就越多。如何减少mongodb内存的消耗?还是唯一的出路——更多的内存?

4

2 回答 2

2

我认为这和您之前的问题具有相同的根本原因 - 缺乏资源。您在之前的消息中指出您只有约 1.4GB 的内存,在这种情况下,当您分配更多内存时修复成功。修复必须遍历并重写整个数据集,因此将是密集的。

这里有关于MongoDB如何使用内存的详细描述:

http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage

不要忘记,您在 RAM 中的工作集包括索引和数据,因此这不仅仅是对象数量的问题。

如果您的工作数据集在大多数情况下应该适合 1.4GB,那么您可能不需要额外的 RAM,但是,当它超过这些限制时,您将不得不配置一些交换(以避免 OOM Killer和其他问题 - 请参阅此处此处了解更多信息)。在不增加 RAM 的情况下,准备好这样的使用也很慢。在上一期中,您没有配置交换 - 如果您执行一些消耗所有可用内存的操作(例如修复),这不会让操作系统去任何地方。

关于初始连接失败,如果没有指定参数,我相信它可能会尝试在默认情况下连接 localhost:27017(而不是 IP) - 您的/etc/hosts文件是否有可能返回 IPV6 地址或类似的东西。如果您尝试手动连接到 localhost,您会失败吗?

于 2012-08-02T11:37:57.600 回答
0

“ulimit -v unlimited”对我有用。

于 2013-08-13T04:47:54.320 回答