Ubuntu下MongoDB內存管理的核心操作指南
Ubuntu系統中,MongoDB默認使用WiredTiger存儲引擎(推薦),其內存管理主要通過cacheSizeGB
參數控制。該參數定義了WiredTiger引擎可使用的最大內存(單位:GB),直接影響數據庫的緩存效率和性能。
sudo nano /etc/mongod.conf
;storage
section,添加或修改wiredTiger.engineConfig.cacheSizeGB
參數(例如設置為系統總內存的50%-70%,避免占用過多內存導致系統卡頓):storage:
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 根據服務器內存調整,如16GB內存可設為8GB
③ 保存文件并重啟MongoDB服務使配置生效:sudo systemctl restart mongod
。配置修改后,需通過以下命令確認cacheSizeGB
是否設置成功:
db.serverStatus().wiredTiger.cache
,查看bytes dirty
(臟頁數據量)、bytes valid
(有效緩存數據量)等指標,確認緩存大小是否符合預期;top -p $(pgrep mongod)
,觀察RES
(常駐內存)列,判斷MongoDB實際占用的物理內存是否接近配置的cacheSizeGB
。為防止MongoDB因內存不足導致系統頻繁使用Swap(虛擬內存),需優化Swap設置:
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo echo '/swapfile none swap sw 0 0' >> /etc/fstab # 永久生效
vm.swappiness
控制系統使用Swap的傾向(值越低,越傾向于使用物理內存)。編輯/etc/sysctl.conf
,添加vm.swappiness=10
(推薦值:10-30),執行sudo sysctl -p
使設置生效。除cacheSizeGB
外,還可調整以下參數進一步優化內存使用:
oplogSizeMB
定義了復制操作日志的大?。▎挝唬篗B),影響主從復制的性能。若服務器內存充足,可適當增大該值(如50GB),避免因oplog過小導致復制中斷:systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
operationProfiling:
mode: slowOp # 開啟慢查詢分析
slowOpThresholdMs: 100 # 慢查詢閾值(毫秒)
storage:
wiredTiger:
engineConfig:
oplogSizeMB: 51200 # 根據業務需求調整
operationProfiling
模塊,記錄執行時間超過閾值的查詢,幫助定位內存消耗大的慢查詢,進而優化查詢語句或索引。內存管理是長期過程,需定期監控以下指標:
mongostat
(查看實時讀寫、內存使用情況)、mongotop
(查看集合級讀寫耗時)、htop
(系統級內存監控);