redis问题诊断:info指令

在使用 Redis 时,时常会遇到不少问题须要诊断,在诊断以前须要了解 Redis 的运行状态,经过强大的 Info 指令,你能够清晰地知道 Redis 内部一系列运行参数。redis

Info 指令显示的信息很是繁多,分为 9 大块,每一个块都有很是多的参数,这 9 个块分别是:服务器

  1. Server 服务器运行的环境参数
  2. Clients 客户端相关信息
  3. Memory 服务器运行内存统计数据
  4. Persistence 持久化信息
  5. Stats 通用统计数据
  6. Replication 主从复制相关信息
  7. CPU CPU 使用状况
  8. Cluster 集群信息
  9. KeySpace 键值对统计数量信息

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
...

Redis 每秒执行多少次指令?

这个信息在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" "*"

Redis 链接了多少客户端?

这个信息在 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

Redis 内存占用多大 ?

这个信息在 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变量的次数来决定是否须要扩大积压缓冲区,它表示主从半同步复制失败的次数。

相关文章
相关标签/搜索