Mongodb
了解為什麼 MongoDB 使用的 RAM 比允許的wiredTigerCacheSizeGB 多
我的 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