Mongodb内存不足,而总DB大小<可用内存

时间:2016-06-22 18:55:35

标签: mongodb memory

我已经阅读了有关MongoDB的内存消耗的内容,但我理解的一点是,一切都是由操作系统处理的,如果没有可用的内存,数据将从磁盘读取,然后替换其他内容在记忆中。

我有一个非常小的数据库

    > db.stats()
    {
            "db" : "prod",
            "collections" : 11,
            "objects" : 2022,
            "avgObjSize" : 43469.34915924827,
            "dataSize" : 87895024,
            "storageSize" : 113283072,
            "numExtents" : 30,
            "indexes" : 10,
            "indexSize" : 4840192,
            "fileSize" : 201326592,
            "nsSizeMB" : 16,
            "extentFreeList" : {
                    "num" : 0,
                    "totalSize" : 0
            },
            "dataFileVersion" : {
                    "major" : 4,
                    "minor" : 22
            },
            "ok" : 1
    }

带有1GB RAM的小型服务器。看到DB的大小(~100MB),我认为1GB的RAM应该足够了。

然而,我有一段时间的内存不足错误,很少见(每2-3周一次),现在几乎每天两次。

我对可能导致这些问题的原因感到茫然,并认为我可能完全错过了一些东西。

我在网上发现了什么诊断:

  • ulimit

    $ ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 7826
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 7826
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    
  • mongod版本是3.0.12

  • 操作系统信息:

    NAME="Amazon Linux AMI"
    VERSION="2015.03"
    ID="amzn"
    ID_LIKE="rhel fedora"
    VERSION_ID="2015.03"
    PRETTY_NAME="Amazon Linux AMI 2015.03"
    ANSI_COLOR="0;33"
    CPE_NAME="cpe:/o:amazon:linux:2015.03:ga"
    HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
    Amazon Linux AMI release 2015.03
    
  • db.serverStatus()在pastebin上。编辑:查看https://docs.mongodb.com/manual/reference/command/serverStatus/#memory-status

      

    如果mem.virtual值明显大于mem.mapped(例如3次或更多次),则可能表示内存泄漏。

    所以也许要看一下

  • 启用交换

  • 启动MongoDB之前
  • free -m执行

    $ free -m
                 total       used       free     shared    buffers     cached
    Mem:           996         60        935          0          5         19
    -/+ buffers/cache:         36        959
    Swap:         4095          9       4086
    

    并在启动后立即启动(立即启动+运行命令)

    $ free -m
                 total       used       free     shared    buffers     cached
    Mem:           996        925         71          0          5        834
    -/+ buffers/cache:         84        911
    Swap:         4095          9       4086
    
  • mongostat运行

    $ mongostat
    insert query update delete getmore command flushes mapped vsize    res faults qr|qw ar|aw netIn netOut conn     time
        *0    *0     *0     *0       0     1|0       0 688.0M  7.6G 764.0M      0   0|0   0|0   79b    10k    9 07:04:55
        *0    *0     *0     *0       0     1|0       0 688.0M  7.6G 764.0M      0   0|0   0|0   79b    10k    9 07:04:56
        *0    *0     *0     *0       0     3|0       0 688.0M  7.6G 764.0M      0   0|0   0|0  196b    11k    9 07:04:57
        *0    *0     *0     *0       0     1|0       0 688.0M  7.6G 764.0M      0   0|0   0|0   79b    10k    9 07:04:58
        *0    *0     *0     *0       0     2|0       0 688.0M  7.6G 764.0M      0   0|0   0|0  133b    10k    9 07:04:59
        *0    *0     *0     *0       0     1|0       0 688.0M  7.6G 764.0M      0   0|0   0|0   79b    10k    9 07:05:00
    
  • 几小时后运行mongostat显示内存增加(编辑:重新运行serverStatus()shows no increase in mem.resident但是

    $ mongostat
    insert query update delete getmore command flushes mapped vsize    res faults qr|qw ar|aw netIn netOut conn     time
        *0    *0     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      8   0|0   0|0   79b    10k    8 10:39:50
        *0    *0     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      0   0|0   0|0   79b    10k    8 10:39:51
        *0    *0     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      0   0|0   0|0   79b    10k    8 10:39:52
        *0    *0     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      0   0|0   0|0   79b    10k    8 10:39:53
        *0    *0     *0     *0       0     4|0       0 688.0M  7.7G 856.0M      0   0|0   0|0  250b    11k    8 10:39:54
        *0     2     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      0   0|0   0|0  183b    11k    8 10:39:55
        *0     1     *0     *0       0     1|0       0 688.0M  7.7G 856.0M      0   0|0   0|0  131b    11k    8 10:39:56
    
  • swapon -s

    $ swapon -s
    Filename                                Type            Size    Used    Priority
    /swapfile                               file    4194300 10344   -1
    

编辑:我已经设置了MongoDB云监控,这个问题刚刚重新出现。 This is the report,mongo进程在02:29被杀死

您是否知道可能导致此问题的原因?或提示我应该看看哪里?

感谢您的帮助!

的Seb

0 个答案:

没有答案