本文已参与[新人创作礼]活动,一起开启掘金创作之路。
Info命令
Info指令显示的信息繁多,分为9大块。
1.Server: 服务器运行的环境参数
2.Clients: 客户端相关信息
3.Memory: 服务器运行内存统计数据
4.Persistence: 持久化信息
5.Stats: 通用统计数据
6.Replication: 主从复制相关信息
7.CPU: CPU使用情况
8.Cluster: 集群情况
9.KeySpace: 键值对统计数量信息
# 获取所有信息
> info
# 获取内存相关信息
> info memory
# 获取主从复制相关信息
> info replication
极限情况下Redis可以每秒执行10万次指令,CPU几乎被完全榨干.如果ops过高,可以考虑通过 monitor 指令快速观察一下究竟是哪些key被访问得比较频繁,从而在相应业务上进行优化,以减少IO次数。monitor指令会瞬间吐出巨量的指令文本,所以一般在执行monitor后立即使用ctrl+c中断输出。
> redis-cli monitor
> redis-cli info clients
# Clients
connected_clients:124 # 这个就是正在连接的客户端数量
client_longest_output_list: 0
client_biggest_input_buf: 0
blocked_clients: 0
通过观察其数量可以确定是否存在意料之外的连接。如果发现数量不对劲,就可以使用 client list指令列出所有的客户端链接地址来确定源头。 关于客户端的数量,还有一个重要的参数需要观察,那就是rejected_connections,它表示因为超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,则以为着服务器的最大连接数设置得过低,需要调整maxclients参数。
> redis-cli info stats|grep reject
rejected_connections:0
Redis内存占用多大
> reids-cli info memory| grep used|grep human
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脚本引擎占用的内存大小
如果单个Redis内存占用过大,并且在业务上没有太多压缩空间的话,可以考虑集群化了
复制积压缓冲区多大
> redis-cli info replication |grep backlog
repl_backlog_active: 0
repl_backlog_size: 1048576 #这个就是积压缓冲区大小
repl_backlog_first_byte_offset: 0
repl_backlog_histlen: 0
复制积压缓冲区大小非常重要,它严重影响主从复制的效率。当从节点因为网络临时断开了对主节点的复制,然后网络恢复且又重新连上的时候,这段断开的时间内发生在主节点的修改操作指令都会放在积压缓冲区中,这样从节点可以通过积压缓冲区恢复中断的主从同步过程。
积压缓冲区是环形的,后来的指令会覆盖掉前面的内容。如果从节点断开的时间过长,或者缓冲区的容量设置得太小,都会导致从节点无法快速恢复中断的主从同步过程,因为中间的修改指令被覆盖掉了。这时候从节点就会进入全量同步模式,非常耗费CPU和网络资源
如果有多个从节点复制,积压缓冲区是共享的,它不会因为从节点过多而线性增长。如果实例的修改指令请求很频繁,那就把积压缓冲区调大一些,几十个MB大小差不多了;如果很闲,那就设置为几MB大小
> redis-cli info stats|grep sync
sync_full:0
sync_partial_ok:0
sync_partial_err:0 # 半同步失败次数
通过查看sync_partial_err 变量的次数来决定是否需要扩大积压缓冲区,它表示主从半同步复制失败的次数