下面从 Linux 系统层 + MongoDB 配置层 + 架构与使用层 三个维度,系统性地讲一下 MongoDB 在 Linux 上的调优思路和常见做法。
ext4 或 xfs(MongoDB 官方推荐 xfs)/dev/sdb /data xfs defaults,noatime,nodiratime 0 0
noatime:减少元数据写入MongoDB 强烈建议关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(systemd):
# /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
编辑 /etc/security/limits.conf:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
# TCP 队列
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# 虚拟内存
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
应用:
sysctl -p
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 一般不超过物理内存的 60%
如果是专用 MongoDB 服务器,可设为:内存 - (系统+其他进程)
storage:
journal:
enabled: true
commitIntervalMs: 100 # 默认100,可适度降低提高持久性
net:
port: 27017
maxIncomingConnections: 65536
wireObjectCheck: false # 信任客户端时可关闭(谨慎)
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
db.collection.getIndexes()
db.users.find({age:{$gt:18}}, {name:1, _id:0})
$where、大数组操作explain("executionStats")writeConcern: { w: 1, j: false }
(性能 vs 安全权衡)
mongostatmongotopdb.serverStatus()db.currentOp()如果你愿意,可以告诉我:
我可以给你一套 更针对性的调优方案。