首页主机资讯Ubuntu MongoDB性能瓶颈如何排查

Ubuntu MongoDB性能瓶颈如何排查

时间2025-12-03 16:18:03发布访客分类主机资讯浏览795
导读:Ubuntu 上 MongoDB 性能瓶颈排查路线图 一 快速定位瓶颈类型 先用系统工具判断是 CPU、内存、磁盘 IO、网络 哪一环异常: CPU/负载:top、htop;关注 load average 与用户态/系统态占比。 内存与...

Ubuntu 上 MongoDB 性能瓶颈排查路线图

一 快速定位瓶颈类型

  • 先用系统工具判断是 CPU、内存、磁盘 IO、网络 哪一环异常:
    • CPU/负载:top、htop;关注 load average 与用户态/系统态占比。
    • 内存与换页:free -m、vmstat 1;关注 swappage faults/s
    • 磁盘 IO:iostat -x 1;关注 await、r/s、w/s、util%,util 持续接近 100% 多为 IO 饱和。
    • 网络:iftop、nload;关注 带宽占用丢包/重传
  • 再用 MongoDB 自带工具看数据库维度:
    • mongostat:关注 inserts/s、queries/s、updates/s、deletes/s、getmore/s、command/s、flushes/s、mapped、res、faults/s、locked%、idx miss%、q/r/w 队列、conn。其中 faults/s 高说明内存不足导致换页,idx miss% 高说明索引缺失或低效,locked% 高说明写冲突或锁争用,q/r/w 队列升高说明并发压力。
    • mongotop:按集合观察 读写耗时,快速找出“热点集合”。
    • 若观察到 网络带宽打满(如 TX/RX 接近网卡上限),常见于 mongos 单点承载大流量,可通过增加 mongos 实例并做连接负载均衡缓解。

二 日志与慢查询定位

  • 检查 MongoDB 服务与日志路径:
    • 服务状态:systemctl status mongod
    • 日志位置:/var/log/mongodb/mongod.log(Ubuntu 常见路径)
  • 实时观察与过滤:
    • tail -f /var/log/mongodb/mongod.log
    • 提取错误:grep -E ‘E|F’ /var/log/mongodb/mongod.log
    • 日志轮转:use admin; db.runCommand({ logRotate: 1 } )
  • 慢查询与 Profiling:
    • 配置阈值(mongod.conf):
      • systemLog: destination: file; path: /var/log/mongodb/mongod.log; logAppend: true
      • operationProfiling: slowOpThresholdMs: 100; mode: all
    • 或在会话中开启:
      • db.setProfilingLevel(2, 100)
      • db.system.profile.find().sort({ $natural: -1} ).limit(20)
  • 分析执行计划(explain):
    • db.collection.find({ age: { $gt: 30} } ).explain(“executionStats”)
    • 关注:winningPlan.stage 是否为 COLLSCAN(全表扫描需加索引)、executionStats.executionTimeMillis、totalKeysExamined、totalDocsExamined。
  • 典型异常日志模式与处置要点:
    • 连接风暴/文件描述符不足:Too many open files → 检查 ulimit -n,在 /etc/security/limits.conf 提升:mongod soft/hard nofile 64000
    • 查询无索引:planSummary: COLLSCAN、keysExamined:0 → 建立合适索引(如 { age:1} )。
    • 副本集心跳异常:REPL heartbeat failed → 检查网络连通性与副本集状态,必要时重同步并检查 Oplog 窗口
    • 存储引擎错误:WiredTiger error → 用 db.serverStatus().storageEngine 核查引擎状态,必要时 mongod --repair(谨慎,先备份)。

三 索引与查询优化

  • 为高频 filter/sort/projection 建立复合索引,避免 COLLSCAN;用 explain 验证索引命中与扫描量。
  • 排序方向需与索引一致;例如索引 { country: -1, city: -1} 可支持 sort { country: -1, city: -1} ,但不支持 { country: -1, city: 1} ,需建立匹配索引或改写排序。
  • 控制返回字段(projection),减少网络与内存开销;分页避免深翻页(结合 _id时间戳 游标)。
  • 合理设置 慢查询阈值(如 100ms),先抓“最慢”再逐步收敛阈值;优化后回归验证执行时间与扫描量是否下降。

四 配置与资源调优

  • WiredTiger 缓存:在 mongod.conf 设置 storage.wiredTiger.engineConfig.cacheSizeGB,通常将可用内存的 70%–80% 分配给缓存(结合实例角色与系统其余服务留出余量)。
  • 连接与队列:根据业务峰值调整 net.maxIncomingConnections,避免连接风暴;结合 mongostat 的 q/r/w 队列与 conn 观察压力。
  • 存储与文件系统:优先 SSD、合理的 RAID 10;减少文档体积、启用压缩可降低 IO。
  • 副本集/分片:检查 oplog 窗口 与同步延迟;分片场景注意 mongos 负载均衡,必要时横向扩展 mongos 实例。

五 监控与长期观测

  • 短期用 mongostat/mongotop/db.serverStatus()/db.system.profile 快速定位;长期建议引入 PMM、MongoDB Cloud Manager/Ops Manager、Datadog、Prometheus+Grafana 做历史趋势、可视化与告警。
  • 关键告警示例:
    • 磁盘 util% 持续接近 100%
    • faults/s 明显升高(内存不足/换页)
    • idx miss% 高企(索引缺失/低效)
    • locked% 高或 q/r/w 队列长期不为 0(并发争用)
    • 慢查询数量与 P95/P99 延迟持续上升
  • 建议以“资源指标 → 数据库指标 → 语句级指标”的三层看板持续观测,并结合变更窗口做 A/B 验证优化成效。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu MongoDB性能瓶颈如何排查
本文地址: https://pptw.com/jishu/762472.html
Ubuntu MongoDB存储引擎选择建议 Ubuntu MongoDB数据迁移方法有哪些

游客 回复需填写必要信息