MongoDB数据库监控

910阅读 0评论2013-07-16 xiaoyao3857
分类:NOSQL

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


1.1      操作系统层面:


1.1.1   TOP命令

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


点击(此处)折叠或打开

  1. 01
  2. [mongo_2 ~]# pidof mongod --获取mongod和配置服务器进程号
  3. 02
  4. 20350 20244 20183 19155
  5. 03
  6. [mongo_2 ~]# pidof mongos --获取路由进程号
  7. 04
  8. 20366
  9. 05
  10. [mongo_2 ~]# top -p 20350,20244,20183,19155,20366 --top命令输出结果
  11. 06
  12. top - 11:01:02 up 5 days, 22:46, 5 users, load average: 0.26, 0.17, 0.07
  13. 07
  14. Tasks: 5 total, 0 running, 5 sleeping, 0 stopped, 0 zombie
  15. 08
  16. 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
  17. 09
  18. Mem: 3924572k total, 3806340k used, 118232k free, 176096k buffers
  19. 10
  20. Swap: 6291448k total, 67488k used, 6223960k free, 434284k cached
  21. 11
  22. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  23. 12
  24. 20244 root 20 0 47.0g 262m 134m S 2.0 6.8 69:28.20 mongod
  25. 13
  26. 20350 root 20 0 540m 55m 25m S 0.0 1.4 78:24.18 mongod
  27. 14
  28. 20183 root 20 0 50.9g 118m 53m S 0.0 3.1 82:21.28 mongod
  29. 15
  30. 19155 root 20 0 41.0g 348m 143m S 0.0 9.1 56:11.06 mongod
  31. 16
  32. 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取值范围一般是-20到19,值越大,PR的值随之越高,那么进程更优先获取CPU调度。

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

RES:进程物理内存占有

SHR:进程的共享内存占有

S:进程状态

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

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

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

COMMAND:启动进程的命令

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

1.1.2   Vmstat



点击(此处)折叠或打开

  1. 01
  2. [mongo_2 ~]# vmstat 2 --每2s刷新一次
  3. 02
  4. procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  5. 03
  6. r b swpd free buff cache si so bi bo in cs us sy id wa st
  7. 04
  8. 2 0 70896 125416 165772 428456 0 0 0 47 2 9 0 1 99 0 0
  9. 05
  10. 7 1 70896 123920 165776 429288 0 0 96 2136 13155 16303 17 14 68 2 0
  11. 06
  12. 1 0 70896 123176 165780 430240 0 0 94 2408 14418 17764 19 15 65 1 0
  13. 07
  14. 0 1 70892 122060 165784 432040 4 0 80 2854 14063 17483 18 14 64 3 0
  15. 08
  16. 1 0 70892 121812 165788 432540 0 0 96 4674 8891 10957 12 10 76 3 0
  17. 09
  18. 4 0 70892 121812 165788 433028 0 0 64 1710 7639 9884 8 6 84 1 0
  19. 10
  20. 1 0 70892 119952 165792 433668 0 0 64 2060 10685 13675 12 10 76 1 0
  21. 11
  22. 4 0 70892 119456 165792 434464 0 0 34 1676 9813 12508 12 9 76 3 0
  23. 12
  24. 0 0 70892 120200 165792 435144 0 0 64 1558 6382 8423 7 6 86 1 0
  25. 13
  26. 0 0 70892 119704 165792 435400 0 0 0 1168 3638 5234 3 3 94 1 0
  27. 14
  28. 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.1.3   Mongotop

 

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

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


点击(此处)折叠或打开

  1. ns total read write 2013-07-15T08:52:15
  2. testdata.testdata 24ms 24ms 0ms
  3. local.replset.minvalid 11ms 0ms 11ms
  4. random.$cmd 0ms 0ms 0ms
  5. local.system.users 0ms 0ms 0ms
  6. local.system.replset 0ms 0ms 0ms
  7. local.system.namespaces 0ms 0ms 0ms
  8. local.system.indexes 0ms 0ms 0ms
  9.  
  10. [mongo_2 ~]# mongotop --port 10000 --locks
  11. connected to: 127.0.0.1:10000
  12. db total read write 2013-07-15T08:58:51
  13. testdata 79ms 30ms 49ms
  14. local 15ms 0ms 15ms
  15. . 5ms 1ms 4ms
  16. testdb 0ms 0ms 0ms
  17. test 0ms 0ms 0ms
  18. random 0ms 0ms 0ms
  19. hxdb 0ms 0ms 0ms
  20. admin 0ms 0ms 0ms


1.1.4   Mongostat


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


点击(此处)折叠或打开

  1. [mongo_2 ~]# mongostat --port 30000
  2. mongostat --discover --port=30000(是个选项可以发现集群中的副本集机器)
  3. connected to: 127.0.0.1:30000
  4. insert query update delete getmore command vsize res faults netIn netOut conn repl time
  5. 1000 0 0 0 0 21 329m 12m 0 254k 4k 6 RTR 17:03:03
  6. 750 0 0 0 0 16 329m 12m 0 190k 3k 6 RTR 17:03:04
  7. 1000 0 0 0 0 20 329m 12m 0 254k 4k 6 RTR 17:03:05
  8. 1000 0 0 0 0 21 329m 12m 0 254k 4k 6 RTR 17:03:06
  9. 950 0 0 0 0 21 329m 12m 0 241k 4k 6 RTR 17:03:07
  10. [mongo_2 ~]# mongostat --port 10000
  11. connected to: 127.0.0.1:10000
  12. 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
  13. *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
  14. *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
  15. *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 miss为0。如果这里数值较大,那就是有很多查询没走索引了。

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.1.5   Mongo shell下的常用监测命令:

实例状态信息:

db.serverStatus()

 

集合信息:

db.printCollectionStats()

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

上一篇:iscsiadm基本用法
下一篇:MOOON分布式消息结构