MongoDB出现CPU飚高,如何强制停止正在执行的操作

  如果发出了一个执行耗时很长的任务给MongoDB服务器,客户端强制终止会导致任务依然在服务器端执行。

  这时MongoDB提供了查询和管理正在执行任务的方式。

// db.currentOp()   获得当前的所有`in progressing`的操作,包括insert/query/update/remove/getmore/command等
> db.currentOp(true)

  返回的数据结构如下:

{ "inprog" :
        [
            {
                        "opid" : 3434473,//操作的id
                        "active" : <boolean>,//是否处于活动状态
                        "secs_running" : 0,//操作运行了多少秒
                        "op" : "<operation>",//具体的操作行为,包括(insert/query/update/remove/getmore/command)
                        "ns" : "<database>.<collection>",//操作的命名空间,如:数据库名.集合名
                        "query" : {//具体的操作语句
                        },
                        "client" : "<host>:<outgoing>",//连接的客户端信息
                        "desc" : "conn57683",//数据库连接描述
                        "threadId" : "0x7f04a637b700",//线程id
                        "connectionId" : 57683,//数据库连接id
                        "locks" : {//锁的相关信息
                                "^" : "w",
                                "^local" : "W",
                                "^<database>" : "W"
                        },
                        "waitingForLock" : false,//是否在等待并获取锁,
                        "msg": "<string>"
                        "numYields" : 0,
                        "progress" : {
                                "done" : <number>,
                                "total" : <number>
                        }
                        "lockStats" : {
                                "timeLockedMicros" : {//此操作获得以下锁后,把持的微秒时间
                                        "R" : NumberLong(),//整个mongodb服务实例的全局读锁
                                        "W" : NumberLong(),//整个mongodb服务实例的全局写锁
                                        "r" : NumberLong(),//某个数据库实例的读锁
                                        "w" : NumberLong() //某个数据库实例的写锁
                                },
                                "timeAcquiringMicros" : {//此操作为了获得以下的锁,而耗费等待的微秒时间
                                        "R" : NumberLong(),//整个mongodb服务实例的全局读锁
                                        "W" : NumberLong(),//整个mongodb服务实例的全局写锁
                                        "r" : NumberLong(),//某个数据库实例的读锁
                                        "w" : NumberLong()//某个数据库实例的写锁
                                }
                        }
                },
                .....  

        ]
    }

 

找到其中耗时secs_running很长的操作,有可能是异常操作,确认后可> db.killOp(opid)

原文地址:https://www.cnblogs.com/yaohonv/p/mongodb_kill_ops.html

时间: 2024-08-09 01:35:27

MongoDB出现CPU飚高,如何强制停止正在执行的操作的相关文章

CPU飚高问题排查基本步骤

CPU 飚高 一般是死循环或者死锁问题导致. 1. 通过 top  命令找到 CPU 消耗最高的进程,并记住进程 ID {pid}.top -M -n 2 -d 3 >{pid}/top.txt 查看top 2. 再次通过 top -Hp  {pid} 找到 CPU 消耗最高的线程 ID,并记住线程 ID(十进制). 3.通过 JDK 提供的 jstack 工具 dump 线程堆栈信息到指定文件中.jstack {pid} >{pid}/jstack_1.txt 一次堆栈快照 备用 jstac

Cpu飚高show-busy-java-threads一件脚本排查与Arthas线上诊断工具排查实战

spring boot 模拟飚高代码 @Servicepublic class TestWhile{    /* 操作内存对象 */    ConcurrentHashMap map = new ConcurrentHashMap();    private void whileTrue(String threadName) {        // 不设置退出条件,死循环        while (true) {            // 在死循环中不断的对map执行put操作,导致内存gc

JVM 线上故障排查基本操作--CPU飙高

JVM 线上故障排查基本操作 CPU 飚高 线上 CPU 飚高问题大家应该都遇到过,那么如何定位问题呢? 思路:首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程.然后找到那个进程中的 “问题线程”,最后根据线程堆栈信息找到问题代码.最后对代码进行排查. 如何操作呢? 通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID. 再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,并记住线程 ID. 通过 JDK 提供的 jstac

MongoDB CPU 利用率高排查

MongoDB CPU 利用率高,怎么破? 经常有用户咨询「MongoDB CPU 利用率很高,都快跑满了」,应该怎么办? 遇到这个问题,99.9999% 的可能性是「用户使用上不合理导致」,本文主要介绍从应用的角度如何排查 MongoDB CPU 利用率高的问题 Step1: 分析数据库正在执行的请求 用户可以通过 Mongo Shell 连接,并执行 db.currentOp() 命令,能看到数据库当前正在执行的操作,如下是该命令的一个输出示例,标识一个正在执行的操作.重点关注几个字段 cl

mongoDB cpu飙高问题

问题描述: 最近几天生产环境上的mongodb一直在报警,cpu飙高,其他如内存.iops.连接数.磁盘操作等都正常.通过定位业务,发现是由于mongodb的表其中一个查询未建立索引导致,110多W的数据,每秒经历的查询10次左右.但是未建立索引导致数据查询走全表扫描,从而致使导致cpu飙高. 解决方式:db.preservationlog.createIndex({eid:1}) ; 为preservationlog表的eid字段创建索引,问题得以解决. cpu曲线图 mongodb所在服务器

WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps"); Console.WriteLine("如果要停止,按Ctrl+C结束程序"); Console.WriteLine("================

MongoDB 副本集(类似高可用) [三]

MongoDB 副本集(类似高可用)1.节点类型standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为活跃节点.passive:存储了完整的数据副本,参与投票,不能成为活跃节点.arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为活跃节点.2.参数说明--dbpath   数据文件路径--logpath  日志文件路径--port        端口号,默认是27017.我这里使用的也是这个端口号.--replSet   复制集的名字,一个replica s

java进程占用cpu过高分析是哪些线程

拿hbase基准测试列子来分析哪些线程使用比较高的cpu,环境是linux,基准测试命令: hbase org.apache.hadoop.hbase.PerformanceEvaluation  --rows=500000 --nomapred --presplit=5 --writeToWAL=true randomWrite 5 首先查看占用cpu最高的进程和线程id,执行命令: [[email protected] logs]$ ps Hh -eo pid,tid,pcpu | sort

STORM在线业务实践-集群空闲CPU飙高问题排查(转)

最近将公司的在线业务迁移到Storm集群上,上线后遇到低峰期CPU耗费严重的情况.在解决问题的过程中深入了解了storm的内部实现原理,并且解决了一个storm0.9-0.10版本一直存在的严重bug,目前代码已经合并到了storm新版本中,在这篇文章里会介绍这个问题出现的场景.分析思路.解决的方式和一些个人的收获. 背景 首先简单介绍一下Storm,熟悉的同学可以直接跳过这段. Storm是Twitter开源的一个大数据处理框架,专注于流式数据的处理.Storm通过创建拓扑结构(Topolog