左膀mongostat,右臂mongotop——MongoDB的监控之道

  通常在排查MongoDB的性能时,我们首先想到的是MongoDB自身内置的两个监测命令工具:mongostat和mongotop,通过这两个命令的输出可以了解到当前MongoDB实例的读写情况,现介绍它们的使用,环境为linux环境。

  1、mongostat命令

   在运行mongod实例的linux机器上运行如下命令:

mongostat --host ip:port -u "用户名" -p "密码" --authenticationDatabase "admin"

  (1)参数说明

  • ip:MongoDB集群中的路由服务器IP地址或者是某个副本集中主从库的IP地址
  • port:路由服务器IP对应的端口号,或者副本集中主从库IP对应的端口号
  • 用户名和密码:与上述ip、port所在的机器保持一致,都是相应管理员的账号和密码,若服务器上没有添加权限认证的话,可以不用设置这些参数
  • authenticationDatabase:必须是admin库

  (2)效果图

  在上图中,mongostat命令默认是每隔一秒输出一行数据。

  (3)mongostat输出字段说明

字段名称 解释描述
insert 每秒插入次数
query 每秒查询次数
update 每秒更新次数
delete 每秒删除次数
getmore 每秒执行getmore次数
command 每秒的命令数,除了插入、查找、更新、删除命令统计外,还统计了别的命令
flushes

对于WiredTiger引擎来说,是指checkpoint的触发次数在一个轮询间隔期间

对于MMAPv1 引擎来说,是指每秒执行fsync将数据写入硬盘的次数

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

flush开销是很大的,如果频繁的flush,就需要排查一下原因了

mapped 所有的被mmap的数据量
vsize 虚拟内存使用量(在mongostat最后一次调用的总数据)
res

物理内存使用量(在mongostat最后一次调用的总数据)

vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,就需要排查一下是否存在其他的程序正在消费内存

faults 每秒访问失败数,与内存swap有关
qrw 客户端读写等待队列数量,高并发时,一般队列值会升高
arw 客户端读写活跃个数
net_in 网络带宽压力,MongoDB实例的网络进流量
net_out 网络带宽压力,MongoDB实例的网络出流量
conn 打开连接的总数,是qr,qw,ar,aw的总和
MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数maxIncomingConnections
time 时间戳

  (4)官方介绍

  点击进入mongostat官方介绍

  2、mongotop命令

  在运行mongod实例的linux机器上运行如下命令:

mongotop --host ip:port -u "用户名" -p "密码"  --authenticationDatabase "admin"  60

  (1)参数说明

  • ip:必须是分片集群中主从库的IP地址
  • port:必须是分片集群中主从库的端口号
  • 用户名和密码:分片集群中副本集管理员权限的账号,若没有添加任何用户的话,那么可以不用设置用户名和密码
  • authenticationDatabase:必须是admin库
  • 60:表示每隔一分钟就输出一组数据,若不设置这个参数的话,那么默认是每隔一秒就输出一组数据

  (2)效果图

   在上图中,我们看到两组数据相差一秒钟。

  (3)mongotop输出字段说明

字段名出 解释说明
ns 全称namespace,由库名+点号+集合名组成
total

指定周期内每次统计mongod实例的读写总耗时时长

(在上图中指定的周期是60秒,默认是1秒)

read

指定周期内每次统计的读操作耗时时长

(在上图中指定的周期是60秒,默认是1秒)

write

指定周期内每次统计的写操作耗时时长

(在上图中指定的周期是60秒,默认是1秒)

  (4)官方介绍

  点击进入mongotop官方介绍

posted @ 2020-06-04 23:49  晒太阳的兔子很忙  阅读(2516)  评论(0编辑  收藏  举报