我的 mongod 命令
mongod --wiredTigerCacheSizeGB 5
在实践中,我让 mongo 实例使用甚至高达 8.6 GB(在具有 50 GB RAM 的 VM 上)
索引使用大约 100 MB(用 选中db.stats()
)
tcmalloc 信息:
MALLOC: 3776745552 ( 3601.8 MiB) Bytes in use by application
MALLOC: + 4744544256 ( 4524.8 MiB) Bytes in page heap freelist
MALLOC: + 20067616 ( 19.1 MiB) Bytes in central cache freelist
MALLOC: + 3584128 ( 3.4 MiB) Bytes in transfer cache freelist
MALLOC: + 12470800 ( 11.9 MiB) Bytes in thread cache freelists
MALLOC: + 22544384 ( 21.5 MiB) Bytes in malloc metadata
MALLOC: ------------
MALLOC: = 8579956736 ( 8182.5 MiB) Actual memory used (physical + swap)
MALLOC: + 29933568 ( 28.5 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 8609890304 ( 8211.0 MiB) Virtual address space used
MALLOC:
MALLOC: 21650 Spans in use
MALLOC: 59 Thread heaps in use
MALLOC: 4096 Tcmalloc page size
服务器已经运行了 3 天。
我怎么知道为什么 mongo 消耗的内存超过了允许的缓存大小?有没有办法手动释放“页堆空闲列表”?
命令输出是推荐的Call ReleaseFreeMemory() to release freelist memory to the OS
,但我认为我实际上不能在这个过程之外做到这一点。
MongoDB 版本是4.4.1
,我使用的是mongo:4.4.1-bionic
docker 镜像。
最大缓存大小就是这样 - 对底层存储引擎使用的缓存大小的限制。
如果您运行查询、排序、建立连接等,这些都需要缓存之外的内存。
MongoDB 使用 tcmalloc 进行内存管理,当程序调用
free
.tcmallocAggressiveMemoryDecommit
您可以使用此处添加的服务器参数 调整 tcmalloc 释放内存的方式: https ://jira.mongodb.org/browse/SERVER-16829