【推荐】六大免费的Redis内存分析工具

网友投稿 5045 2023-05-07

【推荐】六大免费的Redis内存分析工具

【推荐】六大免费的Redis内存分析工具

我们在本文中为您推荐了六种实用工具,它们曾被我们用来分析自己的Redis实例。它们分别是:

Redis Memory Analyzer(Redis内存分析器,RMA)Redis Sampler(Redis采样器)RDB Tools(RDB 工具集)Redis-Audit(Redis-审计)Redis Toolkit(Redis工具包)Harvest

1.Redis Memory Analyzer

在Redis内存分析领域,RMA(Redis内存分析器)是最全面的FOSS(译者注:Free and Open Source Software,免费且开源的软件)之一。它支持三种不同的级别模式,分别是:

RMA - 全局模式

在全局模式下,RMA 提供了一些高级别的统计信息,如键数、系统内存、驻留集的大小、键值空间的大小等。值得一提的是其特殊功能:“键值空间开销”,这是Redis系统用来存储与键值空间相关信息的内存数量,例如列表数据结构中的指针数量。

RMA - 扫描器模式

在扫描器模式中,我们能够获取键值空间的概述。它给出了高级别的命名空间(因此,a:b:1和a:c:1合并为a:*),同时带有各种条目的类型,及其命名空间所占用内存的百分比。该模式可作为分析的起点,然后使用下面的“RAM”模式进行详细的分析。

RMA - RAM模式

在RAM模式下,我们得到键值空间级别的内存开销值,当然大多数其他开源的内存分析工具也能提供。因此,此处将a:b:1和a:c:1分别当作a:b:*和a:c:*,我们从而得到有关内存使用、实际数据大小、开销、编码、最小和***TTL等方面的详细信息。这些都有助于我们查出那些系统中内存消耗“大户”。

不过,此工具长久未被更新了(在GitHub上的***一次提交是在一年多以前)。即便如此,它仍然是我们进行详细分析的***工具之一。

RMA的安装和使用:

RMA需要在系统上事先安装好Python和PIP(译者注:Python的包管理工具),两者一般都被预安装在了主流的操作系统之上。安装完毕后,您可以执行一条“pip install rma”的命令来安装RDB工具。

RMA的优势:

能够实时运行。使用扫描命令来遍历数据库,因此它对性能的影响是有限的,但分析的准确度较高。有很好的支持文档,很容易找到使用示例。支持自定义和筛选功能,包括只分析特定的数据类型,或只是考虑与特定模式相匹配的键值。能提供不同级别的详细信息,包括:命名空间、键值或全局值。相对其他工具,它具有一项特殊的功能:可以显示数据结构的开销(即,Redis系统用来存储与键值空间相关信息的内存数量,例如列表数据结构中的指针数量)。

RMA的劣势:

不支持概率采样。对于大型数据库来说,其线性扫描数据库的方式可能会非常缓慢。为了提高性能,我们可以在返回了一定数量的键值后,选择中止扫描。输出中带有太多的细节。虽然对专家有用,但它也可能给新手带来混淆。

2.Redis Sampler

Redis Sampler对数据库执行的是概率扫描,并能报告以下的信息:

键值在各种数据类型之间的百分比分布(基于键值的数量,而不是对象的大小)。字符串类型的***键,基于strlen,以及它们所消耗的内存百分比。对于所有其他数据类型,它计算出***键、并显示到两个单独的列表中:一个是基于对象的大小;另一个是基于对象的项数。对于每种数据类型,它还能显示“2的幂分布”。这对于我们了解数据类型的大小分布是非常有用的。其输出能够详细地说明给定类型键值的百分比区间,即:> 2^x和 <= 2^x+1。

Redis Sampler的安装和使用:

由于是一个单独的Ruby脚本,因此它要求Ruby已完成了安装。同时,您还需要安装好“rubygems”和“redis gems”。它的用法非常简单,只需执行命令“./redis-sampler.rb”便可。

Redis Sampler的优势:

非常简单易用,没有查找和需要理解的选项。即使是新手也很容易读懂它的输出。同时,它也能提供足够多的信息,供技术专家对Redis的实例进行详细分析。其显示区域的布局比较清晰,且能够进行过滤。适用于Redis的所有版本。由于没有用到任何诸如DEBUG OGJECT的特权命令,因此它可以被应用到包括亚马逊 ElastiCache在内的任何系统之上。它使用特定数据类型长度的命令来识别数据大小,因此其报告并不受序列化的影响。适用于实时数据。虽然该工具建议是在环回接口上运行,但其实它也能支持对远程系统的采样。

Redis Sampler的劣势:

如果其采样频率的设置高于数据库的本身基数(cardinality),那么它将仍然使用随机键值(RANDOMKEYS)而不是扫描(SCAN)模式。没有现成可用的bundle或Docker的图像。您必须手动安装其相应的依赖项(好在只有两个依赖关系项)。由于数据结构有着不同的存储开销,因此报告中的数据大小并不能完全匹配RAM上所占用的空间。如果您的Redis实例需要身份验证的话,它无法做到开箱即用(out-of-the-box)。您需要修改脚本以适应密码的需求。最简单形式是:redis = Redis.new(:host => ARGV[0], :port => ARGV[1].to_i, :db => ARGV[2].to_i) and change it to: 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管理员来说都是非常实用的工具套件。我们能够想到的几乎所有用例,它都有着对应的工具。在此,我们仅关注它的内存分析工具。虽然不像RMA或Redis Sampler那样全面,但是RDB Tools提供了下面三个方面的重要信息:

(1) 列出了所有(序列化)数值大于B字节【B由用户来指定】的键。

(2) ***的N个键【N由用户指定】。

(3) 特定键的大小:这是从数据库中实时读取的。

RDB Tools的安装和使用:

RDB Tools需要在系统上事先安装好Python和PIP,两者一般都被预安装在了主流操作的系统之上。安装完毕后,您可以执行一条“pip install rdbtools python-lz”的命令来安装RDB工具。

其用法非常简单:

获取前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文件,可被其他开源工具所使用,从而方便地实现数据可视化,同时也能导入RDBMS中予以分析。具有良好的支持文档。支持自定义和筛选选项,您可以籍此获得更加有用的报告。

RDB Tools的劣势:

不能分析实时数据,而且您必须获取RDB dump文件。因此,它报告的是序列化内存的使用率,并非精确地显示RAM上所占用的内存。它并不支持任何内置的分组,因此无法找到***的命名空间。

4.Redis-Audit

Redis-Audit是一种概率工具,您可以用它来快速地获知内存的使用情况。它能够输出各种有用的键组信息,包括:总体内存消耗、组内***TTL、上一次平均访问时间、组中过期键的百分比等。如果您想找到应用中那些大量消耗内存的键值组,那么它就是您的***工具。

Redis-Audit安装和使用:

它的用法非常简单,你可以直接在命令行中输入“execute”

redis-audit.rb hostname [port] [password] [dbnum] [sample_size]

Redis-Audit的优势:

允许您为键值空间和前缀分组定义自己的正则表达式(regex)。适用于Redis的所有版本。

如果样本的大小大于键的实际数量,它将遍历所有的键。在另一方面,此操作会使用*键,而不使用扫描来阻止其他的操作。

Redis-Audit的劣势:

由于使用了“DEBUG OBJECT”命令(这在ElastiCache中是不可用的),因此它所报告的序列化大小与RAM上的实际占用会有所不同。由于不是表格的形式,因此其输出不容易被快速地解析到。

5.Redis Toolkit

Redis Toolkit是一种极简易的监视方案。它可以被用于分析两类关键指标:***率和内存消耗。虽然该项目会定期通过更新来修复bug,但并没有社区去对它所提供的工具予以支持。

Redis Toolkit的安装和使用:

以下是一些纯命令行的简单操作:

开始监视***率:./redis-toolkit monitor报告***率:./redis-toolkit report -name NAME -type hitrate停止监视***率:./redis-toolkit stop在本地系统上创建dump文件:./redis-toolkit dump报告内存使用情况:./redis-toolkit report -type memory -name NAME

Redis Toolkit的优势:

能够通过易用的界面,向您提供准确的信息。能够将前缀分组为任何适合您的级别(因此,如果选取a:b:1和a:c:1,那么它既可以算作a:*、也可以单独计算)。适用于Redis的所有版本,同时不需要访问诸如DEBUG OBJECT之类的特权命令。具有良好的支持文档。

Redis Toolkit的劣势:

由于它工作在序列化的dump模式,因此无法进行实时的内容分析。同样,它报告的内存使用量也并非完全等同于RAM的实际消耗量。在Redis Toolkit运行时,计算机会创建一个dump文件。如果您访问的是一个Redis的远程实例,那么就可能需要一段时间才能完成。使用MONITOR命令来监视***率,以捕获在服务器上运行的所有命令。那么在生产环境中,这样可能会降低性能,并带来安全风险。由于它是通过|GET| / (|GET| + |SET|)来计算***率的,因此如果某个数值经常发生变化,就算没有错过任何真实的缓存,那么它的***率也会有所降低。

6.Harvest

这是一款概率采样的工具,它可以被用于根据键的数量来识别十个***的命名空间和前缀。由于是一款较新的工具,它在GitHub上的关注度并不高。然而,如果您是一名想找到自己的实例中哪些应用数据有拥塞的Redis新手,那么Harvest对您来说就非常最容易上手。

Harvest的安装和使用:

Harvest的优势:

•适用于实时数据。•使用“memory usage”命令来获取内存信息。因此它既能够提供精确的数量信息(而不是序列化大小),又不需要访问DEBUG OBJECT的命令。•您的命名空间不需要用冒号来区分开来。Harvest能够识别常见的前缀,而不是依靠正则表达式来进行命名空间的识别。

Harvest的劣势:

很难适用于任何其他类型的用例。该工具仅适用于Redis v4.0及以上版本。其支持文档非常少。

免费工具的局限性

虽然我们在此列举的工具对于调试Redis实例的内存问题非常实用,但是您也应该知道这些免费工具的一些局限性。

付费工具一般总能提供某些数据的可视化功能,但是我们在此所列举的工具却无法实现开箱即用。它们顶多给您输出CSV文件,以供其他开源软件进一步实现可视化,当然许多工具甚至连此类输出都不具备。这就给Redis的新手用户带来了“陡峭”的学习曲线。因此,如果您需要经常进行内存分析的话,那么您***选用能够提供良好的可视化功能的付费工具。

另一个局限性是它们存储历史信息的能力。和那些*nix的设计理念一样,这些工具只专注于某个方面并能其做到***,但是它们鲜少涉猎整个监控领域。它们既不能提供一段时间的内存消耗曲线图,也无法分析实时的数据。

选择的底线

原文标题:The Top 6 Free Redis Memory Analysis Tools ,作者: Aparajita Raychaudhury

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL进阶:从小工到专家的必读书籍
下一篇:数据库流行度7月排行榜:Oracle和MySQL暴跌创历史新低
相关文章