现象描述

线上环境 CPU 激增,CPU 使用率为 100% , 且持续半小时或更长时间,业务受到影响无法正常工作。

集群状态

  • 连接数正常。

  • 当天业务流量相比前几天增加了 10%(多了大概 10W 条请求)。

  • 内存占用一直维持在 80-90%。

使用 mtools 工具分析日志

使用 mtools 分析工具执行以下查询语句,详细操作请参见 mtools 工具查询日志

  • 查看超过 10s 的查询

    mlogfilter mongod.log --slow 10000
  • 查看所有慢查询并根据频率排序。

    mloginfo mongod.log --queries --sort count

业务分析

  • 存在大量慢查询,大量查询超过 150s。

  • 大量查询没有使用索引,导致全表扫描。

  • 排序字段没有走索引。

  • 索引设计不合理,利用率低下(比如:扫描 5 万个文档,结果仅返回 0~10 个文档,所以即使走了索引,查询也消耗了 100s 左右)。

  • 对某个集合的查询语句不合理,大量的条件重复。

  • 存在上万条 TXN 事务日志。

分析结果

针对日志分析出高频耗时较久的查询集合 A 跟 B,分别在这两张表上创建索引后,CPU 断崖式下降,由此看出 CPU 激增是慢查询导致。

监控