MongoDB在Debian中的內存使用管理
MongoDB在Debian系統中的內存使用主要依賴WiredTiger存儲引擎(默認引擎),其內存管理圍繞“緩存”展開。WiredTiger會將磁盤中的數據和索引加載到內存中進行緩存,以提升讀寫性能。默認情況下,WiredTiger緩存大小為系統可用內存的50%減去1GB(或至少256MB),例如:若服務器有8GB可用內存,默認緩存約為3GB(8GB×50%-1GB=3GB)。
/etc/mongod.conf
)或命令行參數調整緩存大?。?mongod.conf
的storage.wiredTiger.engineConfig
下添加cacheSizeGB
參數(單位:GB),例如設置為4GB:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4
--wiredTigerCacheSizeGB
參數指定,例如:mongod --wiredTigerCacheSizeGB 4
內置命令
連接到MongoDB Shell(mongo
),執行db.serverStatus().mem
命令,可查看以下關鍵指標:
resident
:常駐內存(實際使用的物理內存);virtual
:虛擬內存(映射的磁盤空間);mapped
:映射的內存大?。ù疟P文件映射到內存的部分)。系統工具
free -m
命令查看系統整體內存使用情況(總內存、已用、空閑等);top
/htop
命令監控MongoDB進程的內存占用(按M
鍵按內存排序);vmstat
命令查看內存交換(Swap)情況。第三方工具
優化查詢與索引
db.collection.createIndex({ fieldName: 1 })
),避免全表掃描;db.collection.find({}, { field1: 1, field2: 1 })
)限制返回字段,減少內存占用;limit()
方法限制返回數據量,避免一次性加載過多數據。調整內核參數
修改/etc/sysctl.conf
文件,降低vm.swappiness
值(如設為0
或10
),減少系統對Swap的依賴(Swap會顯著降低內存訪問速度):
sudo sysctl -w vm.swappiness=10
執行sysctl -p
使配置生效。
管理連接數
在mongod.conf
的net
部分設置maxPoolSize
(最大連接數,如100
)和maxIdleTimeMS
(最大空閑時間,如300000
毫秒),避免過多空閑連接占用內存。
啟用內存回收
執行db.adminCommand({setParameter: 1, tcmallocAggressiveMemoryDecommit: 1})
啟用tcmalloc的激進內存回收策略,快速釋放不再使用的內存(注意:可能對性能有輕微影響)。
定期維護
db.collection.dropIndex("indexName")
);db.repairDatabase()
修復數據庫碎片,減少內存占用。