mongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。
一、命令行方式
格式: mongostat -u username -p password -n 行数 间隔秒数
输出项说明:
- inserts/s 每秒插入次数
- query/s 每秒查询次数
- update/s 每秒更新次数
- delete/s 每秒删除次数
- getmore/s 每秒执行getmore次数
- command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
- flushs/s 每秒执行fsync将数据写入硬盘的次数。一般都是0,或者1,通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了。
- mapped/s 所有的被mmap的数据量,单位是MB,
- vsize 虚拟内存使用量,单位MB
- res 物理内存使用量,单位MB
- faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
- locked % 被锁的时间百分比,尽量控制在50%以下,这个数值过大(经常超过10%),那就是出状况了。
- idx miss % 索引不命中所占百分比。正常情况下,所有的查询都应该通过索引,也就是idx miss为0。如果这里数值较大,是不是缺少索引。
- q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了。
- netIn|out: network traffic in|out - bits,网络带宽压力,一般MongoDB,网络不会成为瓶颈
- conn 当前连接数
- time 时间戳
举例:
[root@localhost bin]# ./mongostat -u admin -p 123456 -rowcount 5 1
connected to: 127.0.0.1
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 0 1.11g 2.56g 751m 0 rpt_def:0.0% 0 0|0 0|0 62b 3k 4 14:31:04
*0 *0 *0 *0 0 1|0 0 1.11g 2.56g 751m 0 rpt_def:0.0% 0 0|0 0|0 62b 3k 4 14:31:05
*0 *0 *0 *0 0 1|0 0 1.11g 2.56g 751m 0 rpt_def:0.0% 0 0|0 0|0 62b 3k 4 14:31:06
*0 *0 *0 *0 0 1|0 0 1.11g 2.56g 751m 0 rpt_def:0.0% 0 0|0 0|0 62b 3k 4 14:31:07
*0 *0 *0 *0 0 1|0 0 1.11g 2.56g 751m 0 rpt_def:0.0% 0 0|0 0|0 62b 3k 4 14:31:08
二、Web方式
web方式默认使用端口是程序端口+1000。如