在使用 Redis 时,时常会遇到不少问题须要诊断,在诊断以前须要了解 Redis 的运行状态,经过强大的 Info 指令,你能够清晰地知道 Redis 内部一系列运行参数。redis
Info 指令显示的信息很是繁多,分为 9 大块,每一个块都有很是多的参数,这 9 个块分别是:服务器
Info 能够一次性获取全部的信息,也能够按块取信息。详情能够参考redis官方文档网络
# 获取全部信息 > info # Server ... # Clients ... # Memory ... # Persistence ... # Stats ... # Replication ... # CPU ... # Cluster ... # Keyspace ... # 获取内存相关信息 > info memory # Memory used_memory:889376 used_memory_human:868.53K used_memory_rss:4083712 ... # 获取复制相关信息 > info replication # Replication role:master connected_slaves:0 master_replid:0e4b9992edc630942127f4f3707dd9fb9064a7e0 ...
这个信息在stats块中,能够使用info status
查看。lua
> info stats # Stats total_connections_received:8 total_commands_processed:29 # ops_per_sec: operations per second,也就是每秒操做数 instantaneous_ops_per_sec:10 #表示由于超出最大链接数限制而被拒绝的客户端链接次数, #若是这个数字很大,意味着服务器的最大链接数设置的太低须要调整 maxclients 参数。 rejected_connections:0 #如下内容省略 ...
若是想实时监测redis运行了哪些命令,能够使用monitor命令spa
> monitor OK
在另外一个客户端中运行keys *
,能够看到如下信息:操作系统
> monitor OK 1539355497.644954 [0 127.0.0.1:51082] "keys" "*"
这个信息在 Clients 块里,能够经过 info clients
看到。code
> info clients # Clients connected_clients:124 # 这个就是正在链接的客户端数量 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0
若是想知道客户端连接来源,能够使用client list
查看。内存
> client list id=7 addr=127.0.0.1:50938 fd=9 name= age=4515 idle=305 flags=O db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=monitor id=9 addr=127.0.0.1:51082 fd=8 name= age=4176 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client id=10 addr=127.0.0.1:51086 fd=10 name= age=4148 idle=3893 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=info
这个信息在 Memory 块里,能够经过 info memory 看到。资源
> info memory used_memory_human:827.46K # 内存分配器 (jemalloc) 从操做系统分配的内存总量 used_memory_rss_human:3.61M # 操做系统看到的内存占用 ,top 命令看到的内存 used_memory_peak_human:829.41K # Redis 内存消耗的峰值 used_memory_lua_human:37.00K # lua 脚本引擎占用的内存大小 ...
这个信息在 Replication 块里,能够经过 info replication 看到。文档
> info replication repl_backlog_active:0 repl_backlog_size:1048576 # 这个就是积压缓冲区大小 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 ...
复制积压缓冲区大小很是重要,它严重影响到主从复制的效率。当从库由于网络缘由临时断开了主库的复制,而后网络恢复了,又从新连上的时候,这段断开的时间内发生在 master 上的修改操做指令都会放在积压缓冲区中,这样从库能够经过积压缓冲区恢复中断的主从同步过程。
积压缓冲区是环形的,后来的指令会覆盖掉前面的内容。若是从库断开的时间过长,或者缓冲区的大小设置的过小,都会致使从库没法快速恢复中断的主从同步过程,由于中间的修改指令被覆盖掉了。这时候从库就会进行全量同步模式,很是耗费 CPU 和网络资源。
若是有多个从库复制,积压缓冲区是共享的,它不会由于从库过多而线性增加。若是实例的修改指令请求很频繁,那就把积压缓冲区调大一些,几十个 M 大小差很少了,若是很闲,那就设置为几个 M。
> redis-cli info stats | grep sync sync_full:0 sync_partial_ok:0 sync_partial_err:0 # 半同步失败次数
经过查看sync_partial_err变量的次数来决定是否须要扩大积压缓冲区,它表示主从半同步复制失败的次数。