【IT168 技术】市面上有很多免费开源或者付费的工具来分析Redis实例的内存使用情况,其中最受欢迎的就是Jacks,但是如果你想要更深入的分析你的内存问题,那么使用更有针对性的的工具可能会是更好的选择。
本文中,我们将为大家推荐分析Redis实例内存使用情况最有效的免费工具Top 6:
1. Redis Memory Analyzer (RMA)
2. Redis Sampler
3. RDB Tools
4. Redis-Audit
5. Redis Toolkit
6. Harvest
1)Redis Memory Analyzer(RMA)
Redis Memory Analyzer(RMA)是Redis最全面的FOSS内存分析器之一,支持三个不同级别的分析:
Global - 内存使用信息概述。
Scanner - 较高级别的密钥空间/前缀级内存使用信息,换句话说就是使用最短的公用前缀。
RAM - 最低级密钥空间/前缀,换句话说就是使用最长的公用前缀。
这三种模式都各有自己的用途,感兴趣的朋友可以去RMA ReadMe中查看更多的详细信息。
RMA - Global模式
在全局模式下,RMA提供一些高级统计信息,如密钥数量、系统内存、resident集大小,密钥空间大小等。其中比较特殊的功能是“密钥空间开销”,Redis系统使用的内存存储与密钥空间相关的信息,例如列表数据结构的指针。
RMA - Scanner模式
在Scanner模式下可以概览密钥空间。它提供高级命名空间、项目类型和该命名空间占用的内存百分比。将这些信息和命名空间模式下的RAM行为相结合可以进行详细分析。
RMA - RAM模式
在RAM模式下可以得到了密钥空间级别的内存消耗,这和其他大多数FOSS内存分析器提供的一样,我们可以获得使用的内存、实际数据大小、开销、编码、TTL最小值和最大值的详细信息等等,这有助于查明我们系统中最大的记忆棒。
不过,遗憾的是这个工具的更新频率很低,GitHub上最近的一次更新也已经是一年前了,但这并不影响它是我们发现的最好的分析工具之一。
RMA安装和使用:
RMA需要在系统上安装Python和PIP(两者均适用于所有主要操作系统)。安装完成后,执行一个命令来安装RDB工具 - “pip install rma”。如果要使用命令行也很简单,"rma [-s HOST] [-p PORT] [-a PASSWORD] [-d DB] [-m pattern-to-match] [-l number-of-keys-to-scan] [-b BEHAVIOUR] [-t comma-separated-list-of-data-types-to-scan]"。
RMA优点:
·实时性。
·使用扫描命令遍历数据库,因此性能影响是有限的,而分析非常准确。
·记录完备,很容易找到使用示例。
·支持强大的自定义和过滤选项,包括只分析特定的数据类型,或者只考虑匹配特定模式的密钥)。
·提供不同级别的详细信息,例如命名空间,键或全局值。
·少有的审计工具,可显示了数据结构的开销。
RMA缺点:
·不支持概率抽样。线性扫描数据库对于大型数据库来说可能非常慢,可以选择一旦返回一定数量的密钥来停止扫描以提高性能。
·输出中有很多细节; 虽然对专家有帮助,但它可能只是为了混淆新手。
2)Redis Sampler
Redis Sampler是一个非常强大的工具,可以深入了解Redis实例的内存使用情况。它由Redis开发人员antirez维护,虽然该工具不经常更新,但是暴露出的问题却很少。
Redis Sampler对数据库进行概率性扫描并报告以下信息:
·各种数据类型中key的百分比分布,这里指的是Key的数量。
·基于strlen字符串类型的最大key以及它们消耗的内存百分比。
·对于其他数据类型,计算最大的key并将其显示为两个单独的列表:一个是基于对象的大小,另一个是基于对象中项目的数量。
·对于每种数据类型,显示“Power of 2 distribution”。这对于理解数据类型内的大小分布非常有用。输出结果基本上会详细说明给定类型的key的大小在> 2 ^ x和<= 2 ^ x + 1范围内的百分比。
Redis Sampler安装和使用:
这是一个单独的Ruby脚本,所以需要提前安装Ruby,同时还需要安装“rubygems”和“redis”gems,使用方法很简单,直接执行命令行代码 “./redis-sampler.rb”。
Redis Sampler优点:
·使用简单。
·输出结果完整清晰,即使是初学者也很容易理解,对于Redis专家来说,输出结果提供的信息足以,但是有足够的信息可以让专家对Redis实例进行非常详细的分析。这些部分明确划分并易于过滤。
·适用于所有Redis版本。
·不使用任何像DEBUG OBJECT这样的特权命令,因此它可以在任何系统上使用,包括Amazon的ElastiCache。
·它使用特定于数据类型的长度命令来标识数据大小,因此报告的使用情况不受序列化的影响。
·适用于实时数据。虽然建议在loopback接口上运行,但它支持采样远程系统。
Redis采样器缺点:
如果样本大小设置为高于数据库基数,则它仍将使用RANDOMKEYS而不是SCAN。
没有捆绑包或Docker镜像可用。你必须手动安装依赖关系(尽管很明显,只有2个依赖关系)。
报告数据大小,由于数据结构存储开销,数据大小与RAM上占用的空间不完全匹配。
如果您的Redis实例需要身份验证,则无法正常使用。您需要修改脚本以获取密码; 以最简单的形式搜索:redis = Redis.new(:host => ARGV [0],:port => ARGV [1] .to_i,:db => ARGV [2] .to_i)并将其更改为: redis = Redis.new(:host => ARGV [0],:port => ARGV [1] .to_i,:db => ARGV [2] .to_i,:password =>“add-your-password-here” )
3)RDB Tools
RDB Tools对于要求严格的Redis管理员是非常有用的工具,只要我们想到的用途RDB Tools都有对应的用例,不过本文中我们将专注于内存分析,虽然没有RMA或Redis Sampler那么全面,但RDB Tools也提供了三个重要的信息:
1)值(串行化)大小大于B字节[B由用户指定]的所有键。
2)最大的N个键[N由用户指定]。
3)特定键的大小:这是从数据库中实时读取的。
该套件在GitHub上有许多活跃的贡献者,经常更新,同时RDB的维护者 Sripathi Krishnan在Redis社区中也提供了许多工具。
RDB工具安装和使用:
RDB Tools需要在系统上安装Python和PIP(两者都适用于所有主要操作系统)。安装完成后,执行一条命令来安装RDB工具 - “pip install rdbtools python-lz”
使用方法:
获得200个最大密钥:rdb -c memory /var/redis/6379/dump.rdb -largest 200 -f memory.csv
获取大于128字节的所有密钥:rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
获取密钥的大小:redis-memory-for-key -s localhost -p 6379 -a mypassword person:1
RDB Tools优点:
·输出CSV文件,该文件可以与其他FOSS工具一起使用,并轻松创建数据可视化,导入到RDBMS-es中运行分析。
·有据可查。
·支持自定义和过滤选项,可以获得更多有用的报告。
RDB Tools缺点:
·RDB Tools分析不适用于实时数据,必须进行RDB转储。报告的内存使用量是序列化的内存,与RAM上占用的内存不完全相同。
·没有任何内置的分组支持,因此无法找到最大的命名空间。
4)Redis-Audit
Redis-Audit是一个概率性工具,可用于快速查看内存使用情况,输出关键组的有用信息,如整体内存消耗,组中的最大TTL,平均上次访问时间,过期的密钥百分比等。
Redis-Audit安装和使用:
首先,需要安装Ruby和Bundle,安装完成后,将Redis-Audit存储库克隆到某个文件夹,或者下载该zip并将其解压缩到一个文件夹,运行bundle install完成安装。
用法简单:运行"execute"
redis-audit.rb hostname [port] [password] [dbnum] [sample_size]
Redis-Audit优点:
·允许为keyspace/prefix grouping自定义正则表达式。
·适用于所有Redis版本。
·如果样本量大于实际的密钥数量,它将遍历所有密钥。另外,该操作使用key *而不是扫描,而这可能会阻止其他操作。
Redi-Audit缺点:
·使用DEBUG OBJECT command(在ElastiCache中不可用),因此,它会报告序列化大小,这与RAM上占用的实际大小不同。
·输出不能被快速解析。
5)Redis Toolkit
Redis Toolkit是一款基本的监控解决方案,可用于分析两个关键指标:命中率和内存消耗。虽然该项目会定期更新错误修复,但是遗憾的是并没有一些突出的工具突出。
Redis Toolkit的安装和使用:
首先,需要在系统上安装Docker,并克隆GitHub存储库(或者下载为zip并解压到一个文件夹)。用法基本都是通过一系列简单的命令来完成。
·要开始监视命中率: ./redis-toolkit monitor
·报告命中率: ./redis-toolkit report -name NAME -type hitrate
·要停止监视命中率:./redis-toolkit stop
·要在本地系统上创建转储文件:./redis-toolkit dump
·报告内存使用情况:./redis-toolkit report -type memory -name NAME
Redis Toolkit优点:
·易于理解的界面,提供所需的确切信息。
·将前缀分组到任何级别。
·适用于所有Redis版本; 不需要访问像DEBUG OBJECT这样的特权命令。
·有据可查。
Redis Toolkit缺点:
·内存分析不是实时的,因为它在序列化转储上工作,所报告的内存使用量将不等于实际的RAM消耗量。
·必须在运行Redis Toolkit的计算机上创建转储,如果您有远程Redis实例,那么可能需要等待一段时间。
·监视命中率使用MONITOR命令来捕获服务器上运行的所有命令,这种做法可能会降低性能,进而可能会影响生产。
·命中率计算为| GET | /(| GET | + | SET |),所以如果一个值经常变化,它的命中率会更低。
6)Harvest
这是一个概率抽样工具,可用于根据密钥的数量来标识10个最大的名称空间/前缀,但由于是一个新工具,所以现在在GitHub上还没有很高的人气,不过,如果你是Redis新手,想要确定哪种应用程序数据阻塞了实例,那么Harvest绝对是最简单的选择。
Harvest安装和使用:
作为Docker镜像下载,一旦映像准备就绪,可用CLI中的命令“docker run --link redis:redis -it --rm 31z4 / harvest redis:// redis-URL”来运行该工具。
Harvest优点:
·适用于实时数据。
·使用“memory usage”命令来获取大小信息,因此可以给出准确的大小信息(而不是序列化的大小),并且不需要访问DEBUG OBJECT命令。
Harvest缺点:
·适用性有局限,难以找到其他用例。
·该工具仅适用于Redis v4.0及更高版本。
·文档较少。