• MongoDB运行状态、性能监控,分析


    mongo stat 它的输出有以下几列:

      inserts/s 每秒插入次数
    • query/s 每秒查询次数
    • update/s 每秒更新次数
    • delete/s 每秒删除次数
    • getmore/s 每秒执行getmore次数
    • command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
    • flushs/s 每秒执行fsync将数据写入硬盘的次数。
    • mapped/s 所有的被mmap的数据量,单位是MB,
    • vsize 虚拟内存使用量,单位MB
    • res 物理内存使用量,单位MB
    • faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
    • locked % 被锁的时间百分比,尽量控制在50%以下吧
    • idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
    • q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
    • conn 当前连接数
    • time 时间戳

    Mongo profile Profiler默认是关闭的,你可以选择全部开启,或者有慢查询的时候开启。

    1 > use test
    2 switched to db test
    3 > db.setProfilingLevel(2);
    4 {"was" : 0 , "slowms" : 100, "ok" : 1} // "was" is the old setting
    5 > db.getProfilingLevel()
    6 2

    上面斜体的级别可以取0,1,2 三个值,他们表示的意义如下:

      0 – 不开启

      1 – 记录慢命令 (默认为>100ms)

      2 – 记录所有命令

       Profile 记录在级别1时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种,一种是通过添 加–slowms启动参数配置。第二种是调用db.setProfilingLevel时加上第二个参数:

    db.setProfilingLevel( level , slowms ) 
      db.setProfilingLevel( 1 , 10 );

     

    1 > db.system.profile.find().sort({$natural:-1})
    2 {"ts" "Thu Jan 29 2009 15:19:32 GMT-0500 (EST)" "info" :
    3 "query test.$cmd ntoreturn:1 reslen:66 nscanned:0 query: { profile: 2 } nreturned:1 bytes:50" ,
    4 "millis" : 0} ...

     

    • ts:时间戳
    • info:具体的操作
    • millis:操作所花时间,毫秒

    官方文档。注意,造成满查询可能是索引的问题,也可能是数据不在内存造成因此磁盘读入造成。

    mongodb web monitor 这个页面可以看到

      当前Mongodb的所有连接
    • 各个数据库和Collection的访问统计,包括:Reads, Writes, Queries, GetMores ,Inserts, Updates, Removes
    • 写锁的状态
    • 以及日志文件的最后几百行(CentOS+10gen yum 安装的mongodb默认的日志文件位于/var/log/mongo/mongod.log)

    db.stat()

     

    01 > use test
    02 switched to db test
    03 > db.stats()
    04 {
    05     "collections" : 9,
    06     "objects" : 4278845,
    07     "avgObjSize" : 224.56603031892953,
    08     "dataSize" : 960883236,
    09     "storageSize" : 1195438080,
    10     "numExtents" : 59,
    11     "indexes" : 13,
    12     "indexSize" : 801931264,
    13     "fileSize" : 6373244928,
    14     "ok" : 1
    15 }

    获取服务器的状态

    01 {
            "host" : "abc1234567890",--server的hostname,这里是计算机的名称
            "version" : "2.2.2",--MongoDB的版本号
            "process" : "mongod",--MongoDB的进程名称
            "pid" : 2996,--MongoDB的进程PID
            "uptime" : 511789,--启动时间(单位:s)
            "uptimeMillis" : NumberLong(511789041),
            "uptimeEstimate" : 505769,--基于MongoDB内部粗粒度定时器的运行时间
            "localTime" : ISODate("2012-12-26T00:42:26.576Z"),--server的本地时间
            "locks" : {
                    "." : {
                            "timeLockedMicros" : {
                                    "R" : NumberLong(9909170),
                                    "W" : NumberLong(105416165)
                            },
                            "timeAcquiringMicros" : {
                                    "R" : NumberLong(13023043),
                                    "W" : NumberLong(2050090)
                            }
                    },
                    "admin" : {
                            "timeLockedMicros" : {

                            },
                            "timeAcquiringMicros" : {

                            }
                    },
                    "local" : {
                            "timeLockedMicros" : {
                                    "r" : NumberLong(553001),
                                    "w" : NumberLong(0)
                            },
                            "timeAcquiringMicros" : {
                                    "r" : NumberLong(36574),
                                    "w" : NumberLong(0)
                            }
                    },
                    "Dobug" : {
                            "timeLockedMicros" : {
                                    "r" : NumberLong(1517233),
                                    "w" : NumberLong(83584)
                            },
                            "timeAcquiringMicros" : {
                                    "r" : NumberLong(112682),
                                    "w" : NumberLong(7)
                            }
                    }
            },
            "globalLock" : {
                    "totalTime" : NumberLong("511789041000"),--自实例启动全局锁创建以来到现在多长时间,单位微秒.
                    "lockTime" : NumberLong(105416165),--自全局锁创建以来锁定总时间,单位微秒
                    "currentQueue" : {
                            "total" : 0,--等待全局锁的队列中操作数目
                            "readers" : 0,--等待读锁的队列中操作数目
                            "writers" : 0--等待写锁的队列中操作数目
                    },
                    "activeClients" : {
                            "total" : 0,--连接到server的当前活动client数目
                            "readers" : 0, --执行读操作的当前活动client数目
                            "writers" : 0--执行写操作的当前活动client数目
                    }
            },
            "mem" : {
                    "bits" : 64,--64位机器
                    "resident" : 31,--占用物理内存量
                    "virtual" : 20478, --占用的虚拟内存量
                    "supported" : true, --是否支持扩展内存
                    "mapped" : 10188, --映射到内存的数据文件大小,很接近于你的所有数据库大小。
                    "mappedWithJournal" : 20376
            },
            "connections" : {
                    "current" : 1,--当前活动连接量。连接到server的当前活跃连接数目
                    "available" : 19999--剩余空闲连接量。剩余的可用连接数目
            },
            "extra_info" : {
                    "note" : "fields vary by platform",
                    "page_faults" : 25747,
                    "usagePageFileMB" : 106,
                    "totalPageFileMB" : 12151,
                    "availPageFileMB" : 6195,
                    "ramMB" : 6007
            },
            "indexCounters" : {
                    "note" : "not supported on this platform"
            },
            "backgroundFlushing" : {
                    "flushes" : 8527, --数据库刷新写到磁盘的次数
                    "total_ms" : 599904,--数据库刷新数据到磁盘花费的微秒数
                    "average_ms" : 70.35346546264806,--执行单次刷新花费的平均微秒数
                    "last_ms" : 51,--最后一次执行完成刷新数据到磁盘花费的微秒数
                    "last_finished" : ISODate("2012-12-26T00:41:32.013Z")-当最后一次刷新数据完成时的时间戳
            },
            "cursors" : {
                    "totalOpen" : 0, --server为client保持的游标(cursor)总数
                    "clientCursors_size" : 0,
                    "timedOut" : 0--server启动以来游标(cursor)超时的总数
            },
            "network" : {
                    "bytesIn" : 1925,--发送到数据库的数据总量(bytes)
                    "bytesOut" : 4294,--数据库发出的数据总量(bytes)
                    "numRequests" : 24--发送到数据库的请求量
            },
            "opcounters" : {
                    "insert" : 0, --server启动以来总的insert数据量
                    "query" : 16646, --server启动以来总的query数据量
                    "update" : 1,--server启动以来总的update数据量
                    "delete" : 0, --server启动以来总的delete数据量
                    "getmore" : 0, --server启动以来调用任何游标的getMore总次数
                    "command" : 22 --server启动以来执行其他命令的总次数
            },
            "asserts" : {
                    "regular" : 0, --server启动以来抛出正规断言(assert 类似于异常处理的形式)总数目
                    "warning" : 0,--server启动以来抛出的告警总数目
                    "msg" : 0,--消息断言数目。服务器内部定义的良好字符串错误
                    "user" : 0, --用户断言数目。用户产生的错误,譬如:磁盘空间满;重复键。
                    "rollovers" : 0--server启动以来,assert counters have rolled over的次数
            },
            "writeBacksQueued" : false,--是否有从mongos执行的retry操作
            "dur" : {
                    "commits" : 29,--上一间隔journal日志发生commit的次数
                    "journaledMB" : 0,--上一间隔写到journal日志的数据量(单位:MB)
                    "writeToDataFilesMB" : 0,--上一间隔journal日志写到数据文件的数据量(单位:MB)
                    "compression" : 0,
                    "commitsInWriteLock" : 0, --写锁期间发生commits的次数
                    "earlyCommits" : 0,--schedule时间前请求commit的次数
                    "timeMs" : {
                            "dt" : 3004,
                            "prepLogBuffer" : 0,--准备写journal日志花费的时间
                            "writeToJournal" : 0,--写journal日志花费的实际时间
                            "writeToDataFiles" : 0,--journal日志后写数据文件花费的时间
                            "remapPrivateView" : 0
                    }
            },
            "recordStats" : {
                    "accessesNotInMemory" : 2,
                    "pageFaultExceptionsThrown" : 1,
                    "Dobug" : {
                            "accessesNotInMemory" : 2,
                            "pageFaultExceptionsThrown" : 1
                    },
                    "local" : {
                            "accessesNotInMemory" : 0,
                            "pageFaultExceptionsThrown" : 0
                    }
            },
            "ok" : 1--serverStatus是否返回正确
    }

     

    • connections 当前连接和可用连接数,听过一个同行介绍过,mongodb最大处理到2000个连接就不行了(要根据你的机器性能和业务来设定),所以设大了没意义。设个合理值的话,到达这个值mongodb就拒绝新的连接请求,避免被太多的连接拖垮。
    • indexCounters:btree:misses 索引的不命中数,和hits的比例高就要考虑索引是否正确建立。你看我的”missRatio” : 3.543930204420982e-7,很健康吧。所以miss率在mongostat里面也可以看
    • 其他的都能自解释,也不是查看mongo健康状况的关键,就不说明了。

    Mongodb 的命令一般很快就完成,但是在一台繁忙的机器或者有比较慢的命令时,你可以通过db.currentOp()获取当前正在执行的操作。

     

    1 >  db.currentOp()
    2 "inprog" : [ ] }

     

    1 "opid" "shard3:466404288""active" false"waitingForLock" false"op""query""ns" "sd.usersEmails""query" : { }, "client_s" :"10.121.13.8:34473""desc" "conn" },

     

    1 > db.killOp("shard3:466404288")

    MongoDB Monitoring Service(MMS)是Mongodb厂商提供的监控服务,可以在网页和Android客户端上监控你的MongoDB状况。

     http://blog.csdn.net/liubo2012/article/details/8203751

  • 相关阅读:
    linux安装mongo-c-driver
    DPDK在虚拟机上运行时,报错: Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x82a1d in rte_eth_dev_configure()
    用python写xml文件
    openvas在centos中扫描单项的python实现
    ARP协议的报文格式
    python装饰器使用
    openvas漏洞扫描:使用openvas时扫描漏洞时,报告中显示的数据与数据库数据不同
    单链表实现一元多项式乘法与加法运算(C语言)
    Java学习笔记DayN Java高级特性概况
    Java学习笔记Day5 集合
  • 原文地址:https://www.cnblogs.com/seasonzone/p/4105512.html
Copyright © 2020-2023  润新知