本文適配 MongoDB 4.2.1 不能經過 MongoDB 的配置文件嚴格限制 MongoDB 佔用的內存 將 storage.wiredTiger.engineConfig.cacheSizeGB 配置爲指望佔用最大內存的 60% 左右便可
> db.serverStatus().mem { "bits": 64, // 操做系統位數 "resident": 15542, // 常駐內存/物理內存(MB) "virtual": 16760, // 虛擬內存 "supported": true // 爲 true 表示支持顯示額外的內存信息 }
> 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.
(RAM - 1 GB)/2 256 MB
walker 在 Windows Server 2012 R2 上將 mongod.cfg 中 storage.wiredTiger.engineConfig.cacheSizeGB 設置爲 32 以後,在任務管理器中發現,MongoDB Server 佔用的內存仍是達到了 45 GB,相關配置以下:html
storage: dbPath: E:\MongoDB\Server\4.2\data journal: enabled: true engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 32
因而想從系統配置上對 MongoDB 進行內存限制。mongodb
WSRM Windows System Resource Manager Windows 系統資源管理器
在 Windows Server 2008 中能夠用 WSRM 限制 MongoDB 內存,從 Windows Server 2012 開始,WSRM 被棄用,相似功能由 Hyper-V 提供。segmentfault
Linux 下能夠使用cgroups限制MongoDB的內存使用bash
本文出自 walker snapshot