1. 內存管理與WiredTiger緩存優化
MongoDB的性能高度依賴內存,尤其是WiredTiger存儲引擎的緩存配置。需將storage.wiredTiger.engineConfig.cacheSizeGB
設置為服務器物理內存的50%-70%(需預留內存給系統和其他進程),避免緩存過小導致頻繁磁盤I/O。同時,通過vm.swappiness
參數控制交換空間使用(建議設為5-10),減少內存不足時的swap操作;禁用透明大頁面(THP),將/sys/kernel/mm/transparent_hugepage/enabled
和/sys/kernel/mm/transparent_hugepage/defrag
設置為never
,避免內存分配延遲。
2. 文件系統選擇與掛載優化
優先使用XFS文件系統(MongoDB官方推薦),其高并發元數據處理能力和低延遲特性更適合大規模數據場景。若使用ext4,需優化掛載選項:noatime,nodiratime
(禁用訪問時間記錄,減少元數據寫入)、barrier=0
(禁用寫屏障,適用于有電池備份的RAID控制器)。XFS掛載時可添加allocsize=512m
(預分配大塊空間,減少碎片)、logbufs=8
(增加日志緩沖區,提升寫入效率)。
3. I/O調度器與內核參數調優
根據存儲設備類型調整I/O調度器:SSD建議使用deadline
調度器(平衡性能與一致性),通過echo deadline | sudo tee /sys/block/sdX/queue/scheduler
設置,并添加udev規則持久化。內核參數方面,優化臟頁寫入(vm.dirty_ratio=10
、vm.dirty_background_ratio=5
)減少I/O阻塞;禁用NUMA(numactl --interleave=all
)避免內存訪問不均導致的性能下降。
4. 磁盤布局與RAID配置
為Journal日志和數據目錄使用單獨物理卷(如將Journal掛載到/opt/mongodb/journal
),減少數據盤I/O壓力。生產環境推薦使用RAID 10(條帶化+鏡像),兼顧高IOPS與冗余,適合高并發寫入場景;避免使用RAID 5(寫入性能受奇偶校驗影響)。
5. 系統資源限制調整
增加MongoDB進程的文件描述符限制(nofile
)和進程數限制(nproc
),編輯/etc/security/limits.conf
添加:mongodb soft nofile 65536
、mongodb hard nofile 65536
、mongodb soft nproc 65536
、mongodb hard nproc 65536
,避免因資源不足導致連接拒絕或性能下降。
6. 監控與慢查詢分析
使用MongoDB內置工具mongostat
(監控IOPS、延遲)、mongotop
(分析集合級查詢時間)實時監控性能;開啟慢查詢日志(operationProfiling.mode=slowOp
、operationProfiling.slowOpThresholdMs=100
),通過db.profile()
查看慢查詢詳情,針對性優化索引或查詢語句。