场景 :线上mongodb实例偶尔会被慢查询打满cpu的情况,影响应用正常连接mongoDB. |
---|
临时解决方法 : 通过脚本抓取指定条件的查询进程opid,并生成kill语句。方便维护人员快速去杀掉慢查询进程,从而快速恢复mongoDB CPU飙高问题。 |
---|
脚本及使用方法如下(脚本分副本集和分片集群):
一 副本集:
#!/bin/bash user='xxxx'
|
---|
把库名为yl_jms_css,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。 sh mongo_replica_kill.sh yl_jms_css db.killOp(459688754); |
---|
把库名为yl_jms_css,集合为customerservicestaff,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。 sh mongo_replica_kill.sh yl_jms_css.customerservicestaff db.killOp(432739282); |
---|
二 分片集群:
#!/bin/bash user='xxxx' /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' |
---|
把库名为yl_jms_ops,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。 sh mongo_sharding_kill.sh yl_jms_ops |
---|
把库名为yl_jms_ops,集合为arrivalscanlist,状态"active" 为 true, 查询类型"op" 为"query"的进程抓出来。 sh mongo_sharding_kill.sh yl_jms_ops.arrivalscanlist db.killOp(460474112); |
---|