MongoDB 4.2 限制內存

先說結論

本文適配 MongoDB 4.2.1
不能經過 MongoDB 的配置文件嚴格限制 MongoDB 佔用的內存
將 storage.wiredTiger.engineConfig.cacheSizeGB 配置爲指望佔用最大內存的 60% 左右便可

查看 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.
  • 紅框所示即爲大體物理內存消耗

MongoDB 內存消耗

storage.wiredTiger.engineConfig.cacheSizeGB

  • 從 MongoDB 3.4 開始, 這個參數默認值爲下面兩者中更大的一個:
(RAM - 1 GB)/2
256 MB

Windows

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

WSRM
Windows System Resource Manager
Windows 系統資源管理器

在 Windows Server 2008 中能夠用 WSRM 限制 MongoDB 內存,從 Windows Server 2012 開始,WSRM 被棄用,相似功能由 Hyper-V 提供。segmentfault

Linux

Linux 下能夠使用cgroups限制MongoDB的內存使用bash

本文出自 walker snapshot
相關文章
相關標籤/搜索