先说结论
本文适配 MongoDB 4.2.1
不能通过 MongoDB 的配置文件严格限制 MongoDB 占用的内存
将 storage.wiredTiger.engineConfig.cacheSizeGB 配置为期望占用最大内存的 60% 左右即可
- 推荐学习唐建法《MongoDB 高手课》
- 推荐阅读张友东MongoDB 如何使用内存?为什么内存满了?
查看 MongoDB 内存使用情况
mem
> db.serverStatus().mem { "bits": 64, // 操作系统位数 "resident": 15542, // 常驻内存/物理内存(MB) "virtual": 16760, // 虚拟内存 "supported": true // 为 true 表示支持显示额外的内存信息 }
tcmalloc
> db.serverStatus().tcmalloc.tcmalloc.formattedString ------------------------------------------------ MALLOC: 13431957064 (12809.7 MiB) Bytes in use by application MALLOC: + 1582014464 ( 1508.7 MiB) Bytes in page heap freelist MALLOC: + 1060879520 ( 1011.7 MiB) Bytes in central cache freelist MALLOC: + 2996608 ( 2.9 MiB) Bytes in transfer cache freelist MALLOC: + 7394200 ( 7.1 MiB) Bytes in thread cache freelists MALLOC: + 74448896 ( 71.0 MiB) Bytes in malloc metadata MALLOC: ------------ MALLOC: = 16159690752 (15411.1 MiB) Actual memory used (physical + swap) MALLOC: + 5287936 ( 5.0 MiB) Bytes released to OS (aka unmapped) MALLOC: ------------ MALLOC: = 16164978688 (15416.1 MiB) Virtual address space used MALLOC: MALLOC: 608155 Spans in use MALLOC: 21 Thread heaps in use MALLOC: 4096 Tcmalloc page size ------------------------------------------------ Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()). Bytes released to the OS take up virtual address space but no physical memory.
- 红框所示即为大致物理内存消耗
storage.wiredTiger.engineConfig.cacheSizeGB
从 MongoDB 3.4 开始, 这个参数默认值为下面二者中更大的一个:
MB
Windows
walker 在 Windows Server 2012 R2 上将 mongod.cfg 中 storage.wiredTiger.engineConfig.cacheSizeGB 设置为 32 之后,在任务管理器中发现,MongoDB Server 占用的内存还是达到了 45 GB,相关配置如下:
storage:
dbPath: E:\MongoDB\Server\4.2\data
journal:
enabled: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 32
于是想从系统配置上对 MongoDB 进行内存限制。
WSRM
WSRM
Windows System Resource Manager
Windows 系统资源管理器
在 Windows Server 2008 中可以用 WSRM 限制 MongoDB 内存,从 Windows Server 2012 开始,WSRM 被弃用,类似功能由 Hyper-V 提供。
Linux
Linux 下可以使用cgroups限制MongoDB的内存使用
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。