MongoDB问题总结

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 # 添加该行,如果不添加,远程也访问不了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值