我刚刚尝试在一台新的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