MongoDB的监控首选:mongostat

 

mongostat实在是太有用了,如果DB出现了异常,我第一反应就是查看mongostat。

如果是运维的话,喝着咖啡,看着mongostat,生活真是惬意啊。

运行很简单,./mongostat --host 10.45.3.97  --port 20127

主要详细说明一下各列的意义(也可以参考./mongostat --help)

   www.2cto.com  

insert:     一秒内的插入数

query :     一秒内的查询数

update:     一秒内的更新数

delete:     一秒内的删除数

  10条简单的查询可能比一条复杂的查询速度还快, 所以数值的大小,意义并不大。

  但至少可以知道,现在是否在处理查询,是否在插入。

  如果是slave,数值前往往有一个*, 代表是replicate操作

 

getmore:    查询时游标(cursor)的getmore操作

  用处不大

    www.2cto.com  

command:    一秒内执行的命令数

  比如批量插入,只认为是一条命令。 意义不大。

  如果是slave,会显示两个值, local|replicated,通过这两个数值的比较,或许可以看出点问题。

  

flushes:    一秒内flush的次数 

  一般都是0,或者1,通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。

  flush开销是很大的,如果频繁的flush,可能就要找找原因了。

    

mapped:     

vsize:

res:

  这个和你用top看到的一样,mapped, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存。

  

faults:

  别被这个名字吓着,大压力下这个数值往往不为0。如果经常不为0,那就该加内存了。

  

locked:

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

  

idx miss:

  非常重要的参数, 正常情况下,所有的查询都应该通过索引,也就是idx miss为0。如果这里数值较大,是不是缺少索引。

  

qr|qw: queue lengths for clients waiting (read|write)

ar|aw: active clients (read|write)

  如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。

  看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了。

  

netIn: network traffic in - bits

netOut: network traffic out - bits

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

 

conn: number of open connections

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

 

repl: 服务器当前状态

    M   - master

    SEC - secondary

    REC - recovering

    UNK - unknown

    SLV - slave

    

time: 当前时间