文档数据库服务

排查实例CPU使用率高问题

2025-06-26 08:06:12

CPU使用率过高的一般排查步骤如下:

1.使用控制台的【监测图表】的【cpu】这一标签,观察哪一时间段内cpu使用率出现过高。

2.登录对应的实例机器查看系统资源使用情况:首先使用Linux的系统监控工具(如top、htop)或Windows的任务管理器,查看系统整体的CPU使用率和其他资源使用情况。确认是否只有MongoDB进程占用大量CPU资源,还是其他进程也在竞争CPU资源。

3.文档数据库服务查询性能分析工具与方式:

    a.MongoDB Compass等工具来查看当前正在执行的查询(MongoDB Compass 的下载与使用移步Mongodb的官网下载)。

    b.使用MongoDB shell 的db.currentOp()命令,检查是否有某个查询或操作占用了大量CPU资源。

    db.currentOp()命令解析:

    例如:连接上Mongodb shell 执行以下操作:

> db.users.find({ age: { $gte: 18 } }).limit(10)
> db.currentOp()
{
  "inprog" : [
    {
      "opid" : 1290,                 // 操作的唯一标识符
      "op" : "query",                // 操作类型:查询
      "ns" : "exampledb.users",      // 操作涉及的命名空间
      "query" : { "age" : { "$gte" : 18 } },   // 查询条件
      "client" : "127.0.0.1:57852",  // 客户端IP地址和端口
      "desc" : "conn211",            // 操作的描述信息
      "active" : true,               // 操作是否活动中
      "secs_running" : 5,            // 操作已经运行的时间(以秒为单位)
      "oplog" : false,
      "numYields" : 0,
      "locks" : {
        "Global" : "r",              // 全局读锁
        "MMAPV1Journal" : "r"        // MMAPv1引擎的日志读锁
      },
      "waitingForLock" : false,
      "msg" : "",
      "numYieldOps" : 0,
      "database" : "exampledb",
      "command" : {
        "find" : "users",            // 执行的命令:查找操作
        "filter" : { "age" : { "$gte" : 18 } },   // 过滤条件
        "limit" : 10                  // 限制结果数
      },
      "planSummary" : "COLLSCAN",    // 查询执行计划摘要
      "lsid" : {
        "id" : { "UUID" : "e45ea917-6c61-4a5e-8681-2da4af89aa29" },   // 会话ID
        "uid" : ObjectId("ea6a1a2570a062f88eac10f5")              // 用户ID
      },
      "$clusterTime" : { "clusterTime" : Timestamp(1657796621, 1), "signature" : { "hash" : { "BsonData" : "wDUTByvnZXjN+MJB/M9Rlg==", "Length" : 28 }, "keyId" : 6963168194386045953 } },
      "stale" : false,
      "txnNumber" : 11,
      "startAt" : ISODate("2023-07-21T15:57:01.246Z"),
      "autocommit" : false,
      "lastWrite" : { "opTime" : { "ts" : Timestamp(1657796621, 1), "t" : 1 }, "lastWriteDate" : ISODate("2023-07-21T15:57:01Z"), "majorityOpTime" : { "ts" : Timestamp(1657796621, 1), "t" : 1 }, "majorityWriteDate" : ISODate("2023-07-21T15:57:01Z") },
      "activeShards" : {},
      "numShards" : 0,
      "shardName" : "",
      "hashed" : false,
      "batchSize" : 0,
      "mode" : "scanned"
    }
  ]
}

4.确认索引使用情况:检查数据库中的索引是否被有效使用。缺少索引或索引使用不当可能导致查询性能下降,从而导致高CPU使用率。

5.长时间运行的查询:检查是否有长时间运行的查询,这些查询可能会占用大量CPU资源。优化查询性能或者对长时间运行的查询进行调整可能有助于降低CPU使用率。

6.调整Write Concern:写操作的Write Concern设置会影响数据写入的确认方式,使用较高级别的Write Concern可能会导致CPU开销增加。根据应用需求,选择合适的Write Concern。

7.硬件性能:确认文档数据库运行在性能良好的硬件上,包括CPU、内存和磁盘。如果硬件性能不足,可能会导致CPU使用率过高。

8.日志记录级别:考虑降低文档数据的日志记录级别,减少日志输出对CPU的影响。

9.压力测试:进行压力测试以模拟生产环境的负载,并观察CPU使用率的变化。通过压力测试可以更好地理解系统的瓶颈和性能问题。

10.数据分片:如果数据量较大,可以考虑使用文档数据库服务的分片集群,将数据分散到多个节点上,以实现水平扩展和负载均衡。

11.数据库版本和配置:确保使用的文档数据库服务版本是较新的稳定版本,并根据硬件资源和负载情况合理配置文档数据库服务的参数。

注意:

高CPU使用率可能是复杂的问题,可能有多个因素共同导致。在进行问题排查时,建议先在测试环境中进行实验和测试,逐步排查可能的原因。如果问题持续存在,可以考虑寻求专业的文档数据库技术支持。


x7uNSPTrIn8y