温馨提示×

debian mongodb如何调优

小樊
49
2026-09-02 09:49:04
栏目: 云计算

在 Debian 上运行 MongoDB 的“调优”通常分为 系统层(OS)MongoDB 配置层存储/硬件层应用层 四个方面。下面给你一份比较实用的 Debian + MongoDB 调优清单(适用于 MongoDB 4.x / 5.x / 6.x / 7.x)。


一、系统层(Debian / Linux)调优

1. 关闭 Transparent Huge Pages(非常重要)

MongoDB 官方强烈建议关闭 THP:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

开机自动生效:

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"

或写进 /etc/rc.local


2. 调整 ulimit(文件描述符 & 进程数)

MongoDB 需要大量文件描述符:

编辑 /etc/security/limits.conf

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

Systemd 下也要加:

systemctl edit mongod
[Service]
LimitNOFILE=64000
LimitNPROC=32000

3. 磁盘调度策略(SSD 推荐)

SSD 使用 nonemq-deadline

echo none > /sys/block/sdX/queue/scheduler

4. 禁用 swap(或降低 swappiness)

sysctl vm.swappiness=1

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

配置文件路径通常是:

/etc/mongod.conf

1. 存储引擎(WiredTiger)

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8   # 物理内存的 50%~70%
    collectionConfig:
      blockCompressor: snappy

⚠️ cacheSizeGB 不要超过物理内存的 70%


2. 写关注 & 日志

storage:
  journal:
    commitIntervalMs: 100   # 默认 100,低延迟可调到 30

3. 网络线程

net:
  maxIncomingConnections: 65536
  serviceExecutor: adaptive   # MongoDB 4.4+

4. 慢查询日志

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

三、索引与查询层调优

1. 查看慢查询

db.currentOp({ "secs_running": { "$gt": 1 } })

2. 分析执行计划

db.collection.find({...}).explain("executionStats")

3. 常见索引优化

  • 高频查询字段建索引
  • 避免 (A, B) 索引但只查 B
  • 使用 覆盖索引(避免回表)
  • TTL 索引处理过期数据

四、副本集 / 分片(如果用了)

副本集

  • writeConcern: majority 保证安全
  • 读请求用 secondaryPreferred 分担压力

分片

  • shard key 必须高基数、低单调性
  • 避免使用 _id 作为 shard key(容易热点)

五、监控与诊断工具

1. 官方工具

mongostat
mongotop

2. 系统监控

iostat -x 1
vmstat 1
htop

3. Prometheus + Grafana(推荐)

MongoDB Exporter:

mongodb_exporter

六、常见性能问题速查表

问题 可能原因
CPU 高 缺索引 / 全表扫描
磁盘 IO 高 journal / 大量写
内存涨 cacheSize 配置不合理
延迟高 网络 / 锁 / 慢查询
OOM swap 未关 / cache 过大

七、示例:一台 16G Debian 服务器的推荐配置

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 10
net:
  maxIncomingConnections: 65536
operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

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

  • MongoDB 版本
  • Debian 版本
  • 服务器配置(CPU / 内存 / 磁盘)
  • 主要用途(读多 / 写多 / 分析 / 缓存)

我可以给你 针对性的调优方案

0