了解MongoDB内存使用情况

时间:2016-05-05 14:41:49

标签: python django mongodb

我有mongoengine的Django应用程序,它经常执行一些聚合查询。

主要问题是 mongod 占用所有内存然后崩溃,因此没有LRU工作, mongod 只是试图获得越来越多的内存。

我的mongodb版本是3.2,默认引擎是MMAPv1。正如文档所说,对于缓存MMAPv1需要dataSize + indexSize的RAM量。在我的情况下,大约370Mb(dataSize约为290,indexSize约为80)。

这是我的db.stats():

{
    "db" : "random_db",
    "collections" : 14,
    "objects" : 155613,
    "avgObjSize" : 1859.8720672437394,
    "dataSize" : 289420272,
    "storageSize" : 338821120,
    "numExtents" : 32,
    "indexes" : 22,
    "indexSize" : 82512192,
    "fileSize" : 1006632960,
    "nsSizeMB" : 16,
    "extentFreeList" : {
        "num" : 25,
        "totalSize" : 258314240
    },
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 22
    },
    "ok" : 1
}

实际上我已经拥有1GB内存,并为另外1GB做了交换文件。 当我的应用程序执行第一个聚合查询(从集合中只获取50个文档)时,mongod RAM使用量增加到~300Mb(当我开始服务时它大约是50-100Mb),直到~70个这样的查询被执行 - 我所有的内存+交换结束, mongod 崩溃。

我已经创建了所有索引,需要聚合的'$ match',如果需要,我可以在这里添加一些。

那么为什么〜缓存中的4000个文档占用超过2GB的RAM,如果我的整个数据库只需要370Mb而db中只有150k文件?我知道我做错了,问题很简单,但我仍无法在文档中找到解释。

BTW,这是我的db.serverStatus.mem:

{
    "bits" : 64,
    "resident" : 112,//this value growth when queries executed
    "virtual" : 2523,
    "supported" : true,
    "mapped" : 1136,
    "mappedWithJournal" : 2272
}

所以,我想,我的 mongod 对于缓存中的整个数据包不能超过2523Mb?

0 个答案:

没有答案