温馨提示×

linux mongodb配置如何调优

小樊
54
2026-10-04 10:47:48
栏目: 云计算

下面从 Linux 系统层 + MongoDB 配置层 + 架构与使用层 三个维度,系统性地讲一下 MongoDB 在 Linux 上的调优思路和常见做法。


一、Linux 系统层调优(基础但非常关键)

1. 文件系统与磁盘

  • 文件系统:推荐 ext4 或 xfs(MongoDB 官方推荐 xfs)
  • 挂载选项(示例):
    /dev/sdb /data xfs defaults,noatime,nodiratime 0 0
    
    • noatime:减少元数据写入
  • 磁盘:
    • 优先 SSD / NVMe
    • MongoDB 数据盘与日志盘分离(可选)

2. 关闭透明大页(THP)

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

3. 系统资源限制

编辑 /etc/security/limits.conf:

mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000

4. 内核参数

# 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

二、MongoDB 配置层调优(mongod.conf)

1. 内存相关

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8   # 一般不超过物理内存的 60%

如果是专用 MongoDB 服务器,可设为:内存 - (系统+其他进程)

2. 日志与写入

storage:
  journal:
    enabled: true
    commitIntervalMs: 100  # 默认100,可适度降低提高持久性

3. 网络

net:
  port: 27017
  maxIncomingConnections: 65536
  wireObjectCheck: false  # 信任客户端时可关闭(谨慎)

4. 慢查询日志

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

三、MongoDB 使用与架构层调优

1. 索引优化(最重要)

  • 避免全表扫描
  • 使用复合索引遵循 ESR 原则:
    • Equality
    • Sort
    • Range
  • 定期清理无用索引:
db.collection.getIndexes()

2. 查询优化

  • 只返回需要的字段
db.users.find({age:{$gt:18}}, {name:1, _id:0})
  • 避免 $where、大数组操作
  • 使用 explain("executionStats")

3. 写入优化

  • 批量写入
  • 合理选择写关注:
writeConcern: { w: 1, j: false }

(性能 vs 安全权衡)

4. 副本集 & 分片

  • 读多写少:增加只读节点
  • 数据量大:使用 Sharding
  • 避免热点 shard(合理 shard key)

四、监控与持续优化

1. 官方工具

  • mongostat
  • mongotop
  • db.serverStatus()
  • db.currentOp()

2. 可视化

  • MongoDB Atlas
  • Prometheus + Grafana
  • Percona Monitoring

五、典型调优检查清单 ✅

  • [ ] 关闭 THP
  • [ ] 使用 xfs + noatime
  • [ ] 调整 nofile / nproc
  • [ ] 合理设置 WT cache
  • [ ] 索引覆盖主要查询
  • [ ] 开启慢查询日志
  • [ ] 监控 CPU / IO / 内存

如果你愿意,可以告诉我:

  • MongoDB 版本
  • 数据量 / QPS
  • 单机 / 副本集 / 分片
  • 主要瓶颈(CPU / IO / 内存)

我可以给你一套 更针对性的调优方案。

0 踩