2022-4-13 更新:mongod配置的cacheSizeGb无效
- 问题描述:之前一直以为配置了这个cacheSizeGB就可以了,结果还是内存占用过高被Kill;
- 原因分析:
后面网上查了资料,说是有一个ulimit命令,可以解除各种mongod的限制;
然后就去查找mongod的启动命令:在 etc/init.d/mongod 文件中;
打开看到下面的start命令:
start()
{
# Make sure the default pidfile directory exists
if [ ! -d $PIDDIR ]; then
install -d -m 0755 -o $MONGO_USER -g $MONGO_GROUP $PIDDIR
fi
# Make sure the pidfile does not exist
if [ -f "$PIDFILEPATH" ]; then
echo "Error starting mongod. $PIDFILEPATH exists."
RETVAL=1
return
fi
# Recommended ulimit values for mongod or mongos
# See http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
#
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000
ulimit -l unlimited
各个命令的描述如下:
-f (file size): unlimited
-t (cpu time): unlimited
-v (virtual memory): unlimited [1]
-l (locked-in-memory size): unlimited
-n (open files): 64000
-m (memory size): unlimited [1] [2]
-u (processes/threads): 64000
到这里答案就很明显了,因为我们的启动命令sudo service mongod start
用到了/etc/init.d/mongod
文件,而这个文件里通过ulimit
解除了各种限制,导致了mongod配置文件中的属性无效
- 解决办法:注释相关ulimit命令,包括-v虚拟内存和-m内存
2021-8-24 更新:mongod基本
操作
以下命令都是针对后台操作(我的系统是CentOS6.5,Mongo版本是4.2,如果系统和数据库都是新版本,请参考:https://docs.mongodb.com/v4.2/tutorial/install-mongodb-on-ubuntu/里的Run MongoDB Community Edition
章节)
- 启动:
sudo service mongod start
- 状态:
sudo service mongod status
- 停止:
sudo service mongod stop
- 重启:
sudo service mongod restart
- 日志文件:
/var/log/mongodb/mongod.log
- 配置文件:
/etc/mongod.conf
2021-7-15 更新:mongod突然挂掉
- 问题描述:之前运行的好好的,突然有一天访问不了,系统登陆不上去,报错连接超时
- 原因分析:
- 根据网上的描述,猜测可能是因为内存占用过高,导致被系统强制停止;
- 去查看日志
/var/log/messages
发现下如下语句:Jul 15 01:24:05 iZ25rlowqlfZ kernel: Out of memory: Kill process 24871 (mongod) score 210 or sacrifice child
- 可以看到,是内存溢出,然后系统强制kill了mongod
- 具体的内存占用,可以通过top命令查看,其中Res(resident memory usage)表示常驻内存,即当前进程真实使用的内存,%Mem就是内存占比(我这里的CentOS是4G内存)
- 解决办法:其实就是下面这个解决办法,配置cacheSizeGB为500M
2021-3-31 更新:内存占用过高
- 问题描述:Mongod运行了几个月,没有去看,今天一看,Linux内存占用95%,其中Mongod占用56%
- 解决办法:修改配置文件,
vim /etc/mongod.conf
storage:
dbPath: /data/db
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.5 # 这里改为500M
2020-10-12 更新:启动报错提示 permission denied
-
问题描述:后台启动mongod时,报错没有权限,提示如下
2020-10-12T09:39:19.756+0800 E STORAGE [initandlisten] WiredTiger error (13) [1602466759:756152][14480:0x7fbe90005bc0], wiredtiger_open: __posix_open_file, 667: /data/db/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1602466759:756152][14480:0x7fbe90005bc0], wiredtiger_open: __posix_open_file, 667: /data/db/WiredTiger.turtle: handle-open: open: Permission denied 2020-10-12T09:39:19.756+0800 W STORAGE [initandlisten] Failed to start up WiredTiger under any compatibility version. 2020-10-12T09:39:19.756+0800 F STORAGE [initandlisten] Reason: 13: Permission denied```
-
原因分析:权限问题,修改/data/db下所有用户、组为mongod
-
解决办法:
chown -R mongod:mongod /data/db
2020-8-4 更新:登录用户不存在
- 问题描述:服务器是阿里云centos,安装mongodb后,有两种启动方式
- 前台启动:
mongod
- 后台启动:
sudo service mongod start
- 问题是在前台启动时,创建了一个用户;到了后台启动时,该用户登录不了,提示用户不存在;
- 前台启动:
- 原因分析:是这两种启动方式,创建的数据存在不同的地方
- 前台启动:
mongod
,默认存储路径是/data/db
- 后台启动:
sudo service mongod start
,默认存储路径是/var/lib/mongo
- 前台启动:
- 解决办法:
- 第一步:修改后台启动的配置文件
/etc/mongod.conf
,如下所示
#Where and how to store data. storage: # dbPath: /var/lib/mongo dbPath: /data/db journal: enabled: true
- 第二步:修改
/data/db
权限,sudo chown mongod:mongod -R /data/db
- 第一步:修改后台启动的配置文件
2020-7-28 更新:远程无法访问
- 问题描述:在Centos安装mongo成功,启动后,只可以本地访问,远程无法访问
- 原因分析:是因为默认配置只可以本地访问
- 解决办法:修改/etc/mongod.conf
# bindIp: 127.0.0.1 #注释掉该行
bindIp: 0.0.0.0 # 添加该行,如果不添加,远程也访问不了