Mongodb

了解為什麼 MongoDB 使用的 RAM 比允許的wiredTigerCacheSizeGB 多

  • July 2, 2021

我的 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-bionicdocker 鏡像。

最大記憶體大小就是這樣 - 對底層儲存引擎使用的記憶體大小的限制。

如果您執行查詢、排序、建立連接等,這些都需要記憶體之外的記憶體。

MongoDB 使用 tcmalloc 進行記憶體管理,當程序呼叫free.

tcmallocAggressiveMemoryDecommit您可以使用此處添加的伺服器參數 調整 tcmalloc 釋放記憶體的方式: https ://jira.mongodb.org/browse/SERVER-16829

引用自:https://dba.stackexchange.com/questions/295048