脚本抓取mongoDB慢查询进程,生成kill语句,快速恢复mongodb CPU打满情况

场景 (警告) :线上mongodb实例偶尔会被慢查询打满cpu的情况,影响应用正常连接mongoDB.
临时解决方法(滴答) : 通过脚本抓取指定条件的查询进程opid,并生成kill语句。方便维护人员快速去杀掉慢查询进程,从而快速恢复mongoDB CPU飙高问题。

脚本及使用方法如下(脚本分副本集和分片集群):

一 副本集(灯泡亮)

#!/bin/bash

user='xxxx'
passw='xxxxx'
port=3717
host='dds-xxx.mongodb.rds.aliyuncs.com'


/usr/local/mongodb/bin/mongo --port "$port" --host "$host" -u"$user" -p"$passw" << EOF |grep $1 |grep 'query|true'|cut -d'|' -f4
var ops = db.currentOp().inprog;

for(i = 0; i < ops.length; i++){
var opid = ops[i].opid;
var nsname = ops[i].ns;
var opname = ops[i].op;
var active_name = ops[i].active;
// print(nsname+"|Stopping op #"+opid)
print(nsname+"|"+opname+"|"+active_name+"|db.killOp("+opid+");")
};
EOF

(滴答)把库名为yl_jms_css,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。

sh mongo_replica_kill.sh yl_jms_css

db.killOp(459688754);
db.killOp(459688751);
db.killOp(455289236);

(滴答)把库名为yl_jms_css,集合为customerservicestaff,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。

sh mongo_replica_kill.sh yl_jms_css.customerservicestaff

db.killOp(432739282);
db.killOp(464015186);

二 分片集群(绿色星星):

#!/bin/bash

user='xxxx'
passw='xxxx'
port=3717
host='s-xxxxx.mongodb.rds.aliyuncs.com'

/usr/local/mongodb/bin/mongo --port "$port" --host "$host" -u"$user" -p"$passw" << EOF |grep $1|grep 'query|true'|cut -d'|' -f4|sed -r 's@(.*:@(@g'
var ops = db.currentOp().inprog;

for(i = 0; i < ops.length; i++){
var opid = ops[i].opid;
var nsname = ops[i].ns;
var opname = ops[i].op;
var active_name = ops[i].active;
// print(nsname+"|Stopping op #"+opid)
print(nsname+"|"+opname+"|"+active_name+"|db.killOp("+opid+");")
};
EOF

(滴答)把库名为yl_jms_ops,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。

sh mongo_sharding_kill.sh yl_jms_ops
db.killOp(460475151);
db.killOp(456069450);
db.killOp(433487617);
db.killOp(464813703);
db.killOp(477121491);

(滴答)把库名为yl_jms_ops,集合为arrivalscanlist,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。

sh mongo_sharding_kill.sh yl_jms_ops.arrivalscanlist

db.killOp(460474112);
db.killOp(456068416);
db.killOp(433486601);
db.killOp(464812643);

原文地址:https://www.cnblogs.com/hmysql/p/13158561.html