zoukankan      html  css  js  c++  java
  • MongoDB数据库监控


    Mongodb监控包括操作系统层面和数据库层面监控


    1.1      操作系统层面:


    1.1.1   TOP命令


    监控进程硬件资源使用情况:

    [mongo_2 ~]# pidof mongod      --获取mongod和配置服务器进程号
    20350 20244 20183 19155
    [mongo_2 ~]# pidof mongos       --获取路由进程号
    20366
    [mongo_2 ~]# top -p 20350,20244,20183,19155,20366   --top命令输出结果
    top - 11:01:02 up 5 days, 22:46,  5 users,  load average: 0.26, 0.17, 0.07
    Tasks:   5 total,   0 running,   5 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.4%us,  0.5%sy,  0.0%ni, 98.8%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3924572k total,  3806340k used,   118232k free,   176096k buffers
    Swap:  6291448k total,    67488k used,  6223960k free,   434284k cached
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                     
    20244 root      20   0 47.0g 262m 134m S  2.0  6.8  69:28.20 mongod                                                     
    20350 root      20   0  540m  55m  25m S  0.0  1.4  78:24.18 mongod                                                      
    20183 root      20   0 50.9g 118m  53m S  0.0  3.1  82:21.28 mongod                                                     
    19155 root      20   0 41.0g 348m 143m S  0.0  9.1  56:11.06 mongod                                                      
    20366 root      20   0  325m  14m 3724 S  0.0  0.4  48:48.40 mongos 


    命令结果说明:

     

    信息统计区:

    系统运行了5天,22小时46分,现在有5个终端连接。

    load average是任务队列的平均长度,三个值分别是最近1分钟,5分钟,15分钟到现在的平均值。

    第二行是任务信息,表示目前统计了5个进程,5个进程都在睡眠状态。

    第三行是CPU信息,表示各种对象使用的cpu时间百分比,多cpu可能有多行信息:

    Us:用户空间占用cpu百分比

    Sy:内核空间占用cpu百分比

    Ni:改变过优先级的进程占用的cpu百分比

    Id:CPU空闲率

    Wa 等待输入输出的CPU时间百分比

    Hi,Si,St: 处理hi( Hardware IRQ)cpu,si(Software Interrupts),st(Steal Time)的时间比

    第三、四行:内存信息对于操作系统而言,可用内存是free值,对于进程而言,可用内存则是free+buffers+cached。一般需要着重关注的是swap used,如果这个值在不断变动,那说明有很多的内存页面换入换出,系统存在性能问题。

     

    进程信息区:

     

    Pid:进程号

    User:运行进程的用户

    PR:进程优先级:如果没有特别指明,一般用户进程都是20

    NI:进程NICE值,这个值会影响PR,对于Linux取值范围一般是-2019,值越大,PR的值随之越高,那么进程更优先获取CPU调度。

    VIRT:进程映射的虚拟内存大小,这个值和数据库文件大小有关

    RES:进程物理内存占有

    SHR:进程的共享内存占有

    S:进程状态

    %CPU:上次更新到现在进程cpu占有百分比

    %MEM:进程物理内存占有百分比

    Time+:进程使用cpu的总时间

    COMMAND:启动进程的命令

    Top命令能反映整体状况,也能反应个进程状态,但是磁盘操作情况看不到,可以用vmstat命令作补充:

    1.1.2   Vmstat


    [mongo_2 ~]# vmstat  2     --每2s刷新一次
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    2  0  70896 125416 165772 428456    0    0     0    47    2    9  0  1 99  0  0
    7  1  70896 123920 165776 429288    0    0    96  2136 13155 16303 17 14 68  2  0
    1  0  70896 123176 165780 430240    0    0    94  2408 14418 17764 19 15 65  1  0
    0  1  70892 122060 165784 432040    4    0    80  2854 14063 17483 18 14 64  3  0
    1  0  70892 121812 165788 432540    0    0    96  4674 8891 10957 12 10 76  3  0
    4  0  70892 121812 165788 433028    0    0    64  1710 7639 9884  8  6 84  1  0
    1  0  70892 119952 165792 433668    0    0    64  2060 10685 13675 12 10 76  1  0
    4  0  70892 119456 165792 434464    0    0    34  1676 9813 12508 12  9 76  3  0
    0  0  70892 120200 165792 435144    0    0    64  1558 6382 8423  7  6 86  1  0
    0  0  70892 119704 165792 435400    0    0     0  1168 3638 5234  3  3 94  1  0
    1  0  70892 118340 165796 436036    0    0    96  1586 7341 9778  6  5 87  1  0


    Procs(进程):

    R:运行队列中的进程数量

    B:等待I/O的进程数量

     

    Memory

    swpd: 使用虚拟内存大小,如果这个值在波动,说明系统有性能问题的

    free: 可用内存大小(对操作系统而言)

    buff: 用作缓冲的内存大小

    cache: 用作缓存的内存大小

     

    swap(交换内存)

    Swap

     

    si: 每秒从交换区写到内存的大小

    so: 每秒写入交换区的内存大小

     

    IO:(Linux版本块大小为1024bytes

    bi: 每秒读取的数据块数

    bo: 每秒写入的数据块数

     

    系统:

    in: 每秒中断数,包括时钟中断。

    cs: 每秒上下文切换数。

     

    CPU(以百分比表示):

    us: 用户进程执行时间(user time)

    sy: 系统进程执行时间(system time)

    id: 空闲时间

    wa: 等待IO时间

    出现性能问题:例如内存上涨,可以看到交换内存波动,cpu使用率上升,可以看到us可能值比较大,id值变小。

    1.2      数据库层面


    1.2.1   Mongotop

     

    这个命令可以在集合和数据库级别,跟踪哪些时间花费在哪些对象的读和写上。

    由于路由进程一般不存放数据,这个命令一般只能用于mongod进程


    ns       total        read       write              2013-07-15T08:52:15
    testdata.testdata        24ms        24ms         0ms
    local.replset.minvalid        11ms         0ms        11ms
    random.$cmd         0ms         0ms         0ms
    local.system.users         0ms         0ms         0ms
    local.system.replset         0ms         0ms         0ms
    local.system.namespaces         0ms         0ms         0ms
    local.system.indexes         0ms         0ms         0ms
     
    [mongo_2 ~]# mongotop --port 10000 --locks
    connected to: 127.0.0.1:10000
    db       total        read       write              2013-07-15T08:58:51
    testdata        79ms        30ms        49ms
    local        15ms         0ms        15ms
    .         5ms         1ms         4ms
    testdb         0ms         0ms         0ms
    test         0ms         0ms         0ms
    random         0ms         0ms         0ms
    hxdb         0ms         0ms         0ms
    admin         0ms         0ms         0ms


    1.2.2   Mongostat

    这个命令用于追踪数据库实例的实时运行状况,是一个十分重要的命令。类似Linuxvmstat命令。

    [mongo_2 ~]# mongostat --port 30000
    mongostat --discover --port=30000(是个选项可以发现集群中的副本集机器)
    connected to: 127.0.0.1:30000
    insert  query update delete getmore command  vsize    res faults  netIn netOut  conn repl       time
    1000      0      0      0       0      21   329m    12m      0   254k     4k     6  RTR   17:03:03
    750      0      0      0       0      16   329m    12m      0   190k     3k     6  RTR   17:03:04
    1000      0      0      0       0      20   329m    12m      0   254k     4k     6  RTR   17:03:05
    1000      0      0      0       0      21   329m    12m      0   254k     4k     6  RTR   17:03:06
    950      0      0      0       0      21   329m    12m      0   241k     4k     6  RTR   17:03:07
    [mongo_2 ~]# mongostat --port 10000
    connected to: 127.0.0.1:10000
    insert  query update delete getmore command flushes mapped  vsize    res faults     locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn set repl       time
    *1000     *0     *0     *0       0     4|0       0  27.2g  55.3g   745m      2 testdata:8.4%          0       0|0     0|0   314b     4k    18 sh0  SEC   17:03:11
    *1000     *0     *0     *0       0     8|0       0  27.2g  55.3g   745m      1 testdata:5.3%          0       0|0     0|0   562b     7k    18 sh0  SEC   17:03:12
    *981     *0     *0     *0       0     2|0       0  27.2g  55.3g   747m      1 testdata:5.4%          0       0|0     0|0   190b     3k    18 sh0  SEC   17:03:13
    


    说明

    前面的RTR表示这个实例是一个路由进程:

    Insert:每秒执行的插入操作操作

    Query:每秒执行的查询操作次数

    Delete:每秒执行的删除操作次数。

    Getmore:查询时游标的getmore操作

    Flush:1s内的flush次数,值为0或者1,通过检查两次1之间的时间就可以判断flush时间间隔。时间间隔太短,I/O频繁,系统性能会降低。时间间隔较长,则需要更多的内存空间和journal日志空间。

    Mapped,vsize,res

    这三个和用top看到的差不多,mapped指的是数据文件映射的虚拟内存空间大小,和数据库大小有关。vsize指的是总共映射的虚拟地址空间, res就是实际占用的物理内存,如果res经常突然下降,得看看是否有别的程序在抢内存。

    Faults

    s里的内存页错误,大压力下这个数值往往不为0。如果经常不为0,那就该加内存了。

    Locked

    MongoDB就一把读写锁,这里指的是写锁所住的时间百分比。这个数值过大(经常超过10%),那就是出状况了。

    locked db:表示某个数据库锁在全局锁中的百分比。

    idx miss

    正常情况下,多数的查询都应该走索引,也就是说idx miss0。如果这里数值较大,那就是有很多查询没走索引了。

    qr|qw: queue lengths for clients waiting (read|write):等待中的客户端读写操作,如果这里太大,说明db响应不及时了。

    ar|aw: active clients (read|write):表示当前活动的客户端读写操作量。

    netIn: network traffic in - bits

    netOut: network traffic out - bits

    网络带宽压力,一般MongoDB,网络不会成为瓶颈

    conn: number of open connections

    MongoDB为每一个连接创建一个线程,线程的创建和释放也是有开销的。尽量不要让这个数值很大。

    Repl: 服务器当前状态(只考虑RS集群)

        PRI   - master

        SEC - secondary

        REC - recovering

        UNK - unknown

    1.2.3   Mongo shell下的常用监测命令:

    实例状态信息:

    db.serverStatus()

    集合信息:

    db.printCollectionStats()

    集群和分片监控在后面介绍

  • 相关阅读:
    URL中传参带有%2F等特殊字符
    js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理
    windows传输文件到linux
    npm 切换源
    linux下安装java
    PowerShell:因为在此系统上禁止运行脚本,解决方法
    wget: 未找到命令
    发货通知单禁止手工新增
    固定提前期
    容差码
  • 原文地址:https://www.cnblogs.com/xingxingge/p/14726142.html
Copyright © 2011-2022 走看看