• 脚本抓取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);

  • 相关阅读:
    [跟我学spring学习笔记][更多DI知识]
    [跟我学spring][Bean的作用域]
    [跟我学spring学习笔记][DI循环依赖]
    [跟我学spring学习笔记][IoC]
    [跟我学Spring学习笔记][DI配置与使用]
    [Spring入门学习笔记][静态资源]
    [Spring入门学习笔记][Spring的AOP原理]
    介绍map.entry接口
    hashmap的遍历方法
    java中的队列
  • 原文地址:https://www.cnblogs.com/hmysql/p/13158561.html
Copyright © 2020-2023  润新知