温馨提示×

ubuntu mongodb配置如何优化

小樊
47
2026-10-22 06:51:40
栏目: 云计算

在 Ubuntu 上优化 MongoDB 配置,通常从系统层面、MongoDB 配置、存储与索引、运维监控几个方面入手。下面给你一套比较实用、可落地的优化方案(以 MongoDB 5.x / 6.x 为例,Ubuntu 20.04/22.04)。


一、系统层面优化(非常重要)

1. 关闭 Transparent Huge Pages(THP)

MongoDB 官方强烈建议关闭 THP,否则会导致延迟抖动。

sudo apt install -y hugepages
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

永久生效:

sudo systemctl edit mongod

添加:

[Service]
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"

或写成 systemd 服务。


2. 调整 ulimit

MongoDB 需要大量文件描述符和进程数。

编辑:

sudo nano /etc/security/limits.conf

添加:

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

并确认:

ulimit -n

3. 磁盘与文件系统

  • 推荐使用 XFS(MongoDB 官方推荐)
  • 避免使用 NFS

格式化示例:

mkfs.xfs /dev/sdb

挂载:

mount -o noatime,nodiratime /dev/sdb /data

4. Swappiness

避免 MongoDB 被 swap:

sudo sysctl vm.swappiness=1

永久:

echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf

二、MongoDB 配置优化(/etc/mongod.conf)

1. 绑定 IP 与端口

net:
  bindIp: 0.0.0.0
  port: 27017

⚠️ 生产环境建议只绑定内网 IP


2. 存储引擎(WiredTiger)

storage:
  dbPath: /data/db
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4   # 建议 = 物理内存的 50% 左右
    collectionConfig:
      blockCompressor: snappy

3. 写关注与日志

replication:
  replSetName: rs0

如果是单机:

storage:
  journal:
    commitIntervalMs: 100

4. 连接数控制

net:
  maxIncomingConnections: 65536

三、索引与查询优化

1. 建立合理索引

db.orders.createIndex({ user_id: 1, created_at: -1 })

2. 避免全表扫描

db.orders.find({ status: "paid" }).explain("executionStats")

关注:

  • COLLSCAN ❌
  • IXSCAN ✅

3. 使用投影减少数据传输

db.orders.find({}, { name: 1, price: 1 })

四、内存与缓存优化

  • cacheSizeGB 是关键参数
    • 小内存机器:1–2GB
    • 大内存机器:物理内存 × 50%
  • 不要给 OS 留太少内存(PageCache 也需要)

五、副本集 / 分片(生产建议)

  • 至少 3 节点副本集
  • 使用 writeConcern: majority
  • 读请求可走 secondary(延迟敏感场景谨慎)

六、监控与慢查询

1. 开启慢查询日志

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

2. 查看慢查询

db.system.profile.find().sort({ ts: -1 }).limit(10)

3. 监控工具

  • mongostat
  • mongotop
  • Prometheus + Grafana
  • MongoDB Atlas(云)

七、常见性能问题速查

问题 原因 解决
CPU 高 缺索引 建索引
磁盘 IO 高 journal / 写放大 SSD
内存爆 cacheSize 过大 调小
延迟抖动 THP 关闭
连接数满 连接泄漏 连接池

八、示例生产级 mongod.conf(简化)

storage:
  dbPath: /data/db
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true

net:
  bindIp: 10.0.0.10
  port: 27017
  maxIncomingConnections: 65536

replication:
  replSetName: rs0

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

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

  • MongoDB 版本
  • 数据量 / QPS
  • 单机还是集群
  • 读多还是写多

我可以给你更精准的配置参数。

0 踩