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

来源:互联网 / 作者:SKY / 2018-07-03 15:18 / 点击:
在我们需要分析Redis实例的内存使用情况时,市场上有着许多免费的开源工具,同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话,就可能需要用到

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

【Chinaz.com快译】在我们需要分析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内存分析工具

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

全局 – 显示内存使用信息的概述。

扫描器 – 显示最高级别键值空间(keyspace)和前缀(prefix)的内存使用信息 - 换言之,使用最短的通用前缀(common prefix)。

RAM – 显示最低级键值空间和前缀 - 换言之,使用最长的通用前缀。

每一种模式都有自己的用途,您可以在RMA的自述文件(https://github.com/gamenet/redis-memory-analyzer/blob/master/README.rst)中获取进一步的详细信息.

RMA - 全局模式

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

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

RMA - 扫描器模式

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

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

RMA - RAM模式

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

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

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

RMA的安装和使用:

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

您可以很容易地通过命令行来使用它,其语法为:“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的优势:

能够实时运行。

使用扫描命令来遍历数据库,因此它对性能的影响是有限的,但分析的准确度较高。

有很好的支持文档,很容易找到使用示例。

支持自定义和筛选功能,包括只分析特定的数据类型,或只是考虑与特定模式相匹配的键值。

能提供不同级别的详细信息,包括:命名空间、键值或全局值。

相对其他工具,它具有一项特殊的功能:可以显示数据结构的开销(即,Redis系统用来存储与键值空间相关信息的内存数量,例如列表数据结构中的指针数量)。

RMA的劣势:

不支持概率采样。对于大型数据库来说,其线性扫描数据库的方式可能会非常缓慢。为了提高性能,我们可以在返回了一定数量的键值后,选择中止扫描。

输出中带有太多的细节。虽然对专家有用,但它也可能给新手带来混淆。

2.Redis Sampler

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

Redis Sampler是一款非常强大的工具,可以让我们深入了解Redis实例的内存使用情况。它是由Redis背后的开发人员antirez(https://github.com/antirez)所维护。我们能从该工具中看到他对Redis的深入了解。该工具不常被更新,当然也鲜有问题报告被爆出。

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

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上所占用的空间。

阅读延展

1
3