有人可以告诉我为什么当2GB可用时Mongo不会消耗超过300-400MB的内存,而目前dataSize大约是4GB且有500万以下的文件?
即使处理大量文档的查询,内存消耗也不会激增。我在同一台服务器上运行的其他几个进程很少但是我正在看New Relic,内存消耗从不超过500MB。
在这种情况下不知道是否重要,但服务器是用KVM虚拟化的。我们使用64位版本,因此没有32位限制。
编辑 cat / proc / meminfo
MemTotal: 2051488 kB
MemFree: 205420 kB
Buffers: 8472 kB
Cached: 1346496 kB
SwapCached: 43224 kB
Active: 1208548 kB
Inactive: 551952 kB
Active(anon): 162448 kB
Inactive(anon): 243196 kB
Active(file): 1046100 kB
Inactive(file): 308756 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194300 kB
SwapFree: 4041128 kB
Dirty: 812 kB
Writeback: 0 kB
AnonPages: 397844 kB
Mapped: 222180 kB
Shmem: 72 kB
Slab: 40728 kB
SReclaimable: 28304 kB
SUnreclaim: 12424 kB
KernelStack: 1800 kB
PageTables: 13832 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5220044 kB
Committed_AS: 1404372 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 9888 kB
VmallocChunk: 34359728471 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 53228 kB
DirectMap2M: 2043904 kB
答案 0 :(得分:1)
如果您运行free -m
或cat /proc/meminfo
,您应该可以看到内存使用情况的细分。
缓冲区与使用多少RAM来缓存磁盘块有关。缓存类似于缓冲区,除了它是读取文件的缓存页面。
如果这些值很高,则表明您的预读设置太大而且MongoDB无法使用剩余的内存 - 性能下降。