mongo控制台打开时出现Mlock错误-Mlock失败:无法分配锁定的内存



我刚刚尝试在一台新的Ubuntu18机器上安装MongoDB。

为此,我浏览了网站上的教程。

一切都很顺利,包括用启动服务器

sudo systemctl start mongod 

并检查它是否与一起运行

sudo systemctl status mongod

只是我似乎无法启动mongo控制台。当我键入mongo时,我得到以下错误:

2020-07-17T13:26:48.049+0000 F - [main] Failed to mlock: Cannot allocate locked memory. For more details see: https://dochub.mongodb.org/core/cannot-allocate-locked-memory: Operation not permitted
2020-07-17T13:26:48.049+0000 F - [main] Fatal Assertion 28832 at src/mongo/base/secure_allocator.cpp 255
2020-07-17T13:26:48.049+0000 F - [main]

***aborting after fassert() failure

我检查了建议的链接,但似乎没有限制问题,因为资源不受限制(根据与ulimit的检查(。机器具有16Gb RAM。知道问题/解决方案是什么吗?

编辑:过程限制为:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             64000                64000                processes
Max open files            64000                64000                files
Max locked memory         unlimited            unlimited            bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       62761                62761                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

我得到了确切的错误,链接的mongodb页面对我也没有帮助。我在FreeBSD上运行,在端口的错误报告中发现了一些有用的细节。事实证明,系统级资源限制是根本问题。在FreeBSD上,关键是这两个sysctl设置:

sysctl vm.stats.vm.v_wire_count vm.max_wired

v_wire_count应小于max_wired。增加max_wired为我解决了这个问题。

如果使用某种虚拟化来部署机器,则需要确保允许@memlock系统调用。例如,对于systemd nspawn,请检查以下答案:https://stackoverflow.com/a/69286781/16085315

我刚刚在带有mongodb的FreeBSD虚拟机上遇到了这个问题,如下所述解决了我的问题:

# sysctl vm.stats.vm.v_wire_count vm.max_wired
vm.stats.vm.v_wire_count: 1072281
vm.max_wired: 411615
# sysctl -w vm.max_wired=1400000
vm.max_wired: 411615 -> 1400000
# service mongod restart
Stopping mongod.
Waiting for PIDS: 36308.
Starting mongod.
Add the value for a long term set in /etc/sysctl.conf
vm.max_wired=1400000

v_wire_count应小于max_wired

相关内容

最新更新