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

摘要:
如果一个需要很长时间才能执行的任务被发送到MongoDB服务器,客户端的强制终止将导致该任务仍然在服务器上执行。此时,MongoDB提供了一种查询和管理正在执行的任务的方法。

如果发出了一个执行耗时很长的任务给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)

免责声明:文章转载自《MongoDB出现CPU飚高,如何强制停止正在执行的操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux处理僵尸进程封装的一个时间条插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux安装mongodb,设为全局和后台启动

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.5.tgz # 下载 tar -zxvf mongodb-linux-x86_64-3.6.5.tgz # 解压 mv mongodb-linux-x86_6...

MongoDB GridFS 存储大文件

我们经常会遇到这样的场景:上传/下载文件。 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中; (2)将文件存储在数据库中。 如果我们选择(2),那么我们可以使用MongoDB GridFS 用于存储大小超过 16MB 的文件(文档,压缩文件,音视频,软件)。 一、MongoDB GridFS 介绍 MongoDB GridFS 是一个分...

MongoDB配置文件YAML-based选项全解

配置文件部分 MongoDB引入一个YAML-based格式的配置文件。2.4版本以前的仍然兼容。 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39...

【Linus安装MongoDB及Navicat】

一、安装 0.下载安装包 https://www.mongodb.com/download-center/community 1.创建文件夹及文件 mkdir /usr/local/mongodb mkdir /usr/local/mongodb/data mkdir /usr/local/mongodb/logs mkdir /usr/local/mo...

解决mongodb的安装mongod命令不是内部或外部命令

1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该目录下,这样就相当于安装了mongodb的相关命令。 为了启动mongodb方便,将mongod.exe路径加入环境变量,电脑->属性->高...

Mongodb联合查询

Mongodb使用联合查询的重点需要添加@DBref  这样的话不会将整个文档保存,只会保存关联集合的id package com.java.web; import java.util.List; import org.mongodb.framework.pojo.GeneralBean; import org.springframework.data...