新手区 redis 不得不知的性能指标和监控方法

大话性能 · 2018年10月15日 · 最后由 大话性能 回复于 2018年10月15日 · 5749 次阅读

01 redis 的性能指标

我们在做性能测试的时候,经常需要观察 redis 的运行状态,因此我们得先了解它的一些我们需要观察的指标。redis 提供丰富命令来使用户更好的运作以及了解 redis,不过我觉得只要执行 redis-cli info 命令,就可以了解 redis 的一个状态了,而且指标比较全面了,下面是个人选择的几个相对重要的指标。

connected_clients:68  #连接的客户端数量
used_memory_rss_human:847.62M #系统给redis分配的内存
used_memory_peak_human:794.42M  #内存使用的峰值大小
total_connections_received:619104 #服务器已接受的连接请求数量
instantaneous_ops_per_sec:1159 #服务器每秒钟执行的命令数量
instantaneous_input_kbps:55.85 #redis网络入口kps
instantaneous_output_kbps:3553.89 #redis网络出口kps
rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量
expired_keys:0 #因为过期而被自动删除的数据库键数量
evicted_keys:0 #因为最大内存容量限制而被驱逐evict的键数量
keyspace_hits:0 #查找数据库键成功的次数
keyspace_misses:0 #查找数据库键失败的次数

我觉得在上面的指标中,2 个指标是需要着重观察的。

内存使用

如果 Redis 使用的内存超出了可用的物理内存大小,那么 Redis 很可能会被系统杀掉。针对这一点,你可以通过 info 命令对 used_memory 和 used_memory_peak 进行监控,为使用内存量设定阀值,并设定相应的报警机制。当然,报警只是手段,重要的是你得预先计划好,当内存使用量过大后,你应该做些什么,是清除一些没用的冷数据,还是把 Redis 迁移到更强大的机器上去。

QPS

即每分钟执行的命令个数,即:(total_commands_processed2-total_commands_processed1)/span,为了实时得到 QPS,可以设定脚本在后台运行,记录过去几分钟的 total_commands_processed。在计算 QPS 时,利用过去的信息和当前的信息得出 QPS 的估计值。

02 redis 问题分析方法

redis 有个很好用的功能,就是类似于 mysql 的慢日志。在出现问题的时候,方便我们查看哪里阻塞了。

Slow log 是 Redis 用来记录查询执行时间的日志系统,查询执行时间指的是不包括像客户端响应 (talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

设置 SLOWLOG

Slow log 的行为由两个配置参数 (configuration parameter) 指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。

第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒 (microsecond,1 秒 = 1,000,000 微秒) 的查询进行记录。

例子 1:

执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:

CONFIG SET slowlog-log-slower-than 100

例子 2:

记录所有查询时间大于 1000 微秒的查询:

CONFIG SET slowlog-log-slower-than 1000

另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log,以此类推。

例子 3:

让 slow log 最多保存 1000 条日志:

CONFIG SET slowlog-max-len 1000

查看 slow log

要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志,最新的日志会最先被打印。

清空日志

使用命令 SLOWLOG RESET 可以清空 slow log。

03 redis 监控方法

Redis 监控最直接的方法就是使用系统提供的 info 命令,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。

redis-cli info 结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8 个部分,从 info 大返回结果中提取相关信息,就可以达到有效监控的目的。

我就是利用这个命令结合 shell,完成一个简单的 redis 监控,最核心的语句只有一条,利用了 redis-cli info 和 shell 的管道。

/opt/redis/redis-3.2.5/bin/redis-cli -a ***** info | grep -w "connected_clients" |awk -F':' '{print $2}'

其中:grep -w 用于字符串精确匹配。

执行的结果如下:

在我自己的服务器上测试验证了下其中 2 个指标能否正确获取。

1、获取连接 redis 的客户端数目。

2、获取服务器每秒钟执行的命令数量。

当然,你可以在此脚本基础上根据自己需求做一些扩展、定制化,灵活方便,譬如把数据存储到数据库,利用一些图形化软件把数据可视化等等,这些可以让监控更加直观。最终大家可以做成如下的效果,可以实时查看。

更多性能测试相关学习可以关注公众号大话性能。更多好文章

共收到 5 条回复 时间 点赞

学习

支持一个!

QPS 不直接用 “instantaneous_ops_per_sec” 么?

果冻 回复

可以的,上面那个确实多此一举了,不过很多也是上面的原理

simple 回复

谢谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册