六大免费的Redis内存分析工具

在我们需要分析Redis实例的内存使用情况时,市场上有着许多免费的开源工具,同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话,就可能需要用到一些更具针对性的“独门”工具了。

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

【51CTO.com快译】在我们需要分析Redis实例的内存使用情况时,市场上有着许多免费的开源工具,同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话,就可能需要用到一些更具针对性的“独门”工具了。

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

  1. Redis Memory Analyzer(Redis内存分析器,RMA)
  2. Redis Sampler(Redis采样器)
  3. RDB Tools(RDB 工具集)
  4. Redis-Audit(Redis-审计)
  5. Redis Toolkit(Redis工具包)
  6. Harvest

1.Redis Memory Analyzer  

在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 - 全局模式 

在全局模式下,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 [-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 Sampler是一款非常强大的工具,可以让我们深入了解Redis实例的内存使用情况。它是由Redis背后的开发人员antirez(https://github.com/antirez)所维护。我们能从该工具中看到他对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上所占用的空间。
  • 如果您的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) 特定键的大小:这是从数据库中实时读取的。

该套件在GitHub上有许多活跃的贡献者,因此它能经常保持更新。在互联网上我们也能找到RDB Tools的相关文档。其维护者是Sripathi Krishnan(https://github.com/sripathikrishnan?tab=repositories)。众所周知,他多年来为Redis社区提供了许多工具。

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安装和使用: 

您必须事先安装了Ruby和Bundle(https://bundler.io/)。安装完成之后,您可以将Redis-Audit的存储库(https://github.com/snmaynard/redis-audit.git)克隆到某个文件夹,或是下载zip工具(https://github.com/snmaynard/redis-audit/archive/master.zip)并解压缩到那里。在该文件夹中,您可以运行“bundle install”来完成安装。

它的用法非常简单,你可以直接在命令行中输入“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的安装和使用:

 您的系统上必须先安装好Docker。然后,克隆它的GitHub存储库(https://github.com/alexdicianu/redis_toolkit.git)或下载并解压到某个文件夹中。在该文件夹里,您可以通过执行“./redis-toolkit install.”来完成简单的安装。

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

  • 开始监视***率:./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的安装和使用:

您可以通过链接:https://hub.docker.com/r/31z4/harvest/来下载它的Docker镜像。一旦镜像准备就绪,您就可以在CLI中使用“docker run --link redis:redis -it --rm 31z4/harvest redis://redis-URL”的命令来运行该工具。

Harvest的优势:

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

Harvest的劣势:

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

免费工具的局限性

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

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

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

选择的底线

虽然单个工具的确无法满足您的所有需求,但是它们可以作为您的“武器库”中的常备“武器”,来配合诸如:ScaleGrid的Redis hosting(https://scalegrid.io/redis/products.html)之类具有监控能力的DBaaS服务,来联合使用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网信息收集-Windows篇

目录 内网信息收集 机器角色分析 本机的信息收集 密码信息 如何查找内网的网段 进程、端口、补丁、共享文件夹 总结 域环境信息收集 MSF信息收集 内网信息收集 机器角色分析 1、判断当前主机是什么服务器&#xff1f; web服务器、开发测试服务器、公共服务器、文件服…

机器学习——集成学习

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 期末复习笔记 1.集成学习的基本概念 集成学习&#xff08;ensemble learing&#xff09;通过构建并结合多个学习器来完成学习任务。 有时也被称为多分类器系统&#xff08;multi-classifier system&#xff09;、基于委员会的…

2024年【道路运输企业主要负责人】考试及道路运输企业主要负责人考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试参考答案及道路运输企业主要负责人考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业主要负责人操作证已考过的学员汇总&#xff0c;相对有效帮助道路运输企业主要负责人考试题…

网络异常案例四_IP异常

问题现象 终端设备离线&#xff0c;现场根据设备ip&#xff0c;ping不通。查看路由器。 同一个路由器显示的终端设备&#xff08;走同一个wifi模块接入&#xff09;&#xff0c;包含不同网段的ip。 现场是基于三层的无线漫游&#xff0c;多个路由器wifi配置了相同的ssid信息&a…

五、图像像素算术操作

算术操作无非就是像数值之间的加减乘除操作 一、创建图像像素算术操作——头文件 在项目的头文件中&#xff0c;右击添加&#xff0c;新建项 创建用于图像像素算术操作的头文件&#xff0c;我这边是operater.h 该头文件声明了一个Operater类(class Operater)&#xff0c;该…

海康威视有插件、无插件播放;webrtc直播;西瓜视频播放器;mpegts.js直播;flvjs直播

Notes 视频播放的几种方式 一、Video mp4链接直接播放 二、海康威视3.3插件版直播、云台控制&#xff0c;资源下载地址 index.html引入hk文件中的js文件双击HCWebSDKPlugin.exe安装插件前端参照文件夹hkCamera中的示例代码 三、海康威视3.2无插件版直播&#xff0c;资源下…

Linux---进程间通信 | 管道 | PIPE | MKFIFO | 共享内存 | 消息队列

管道 管道是UNIX中最古老的进程间通信的形式&#xff0c;我们把从一个进程连接到另一个进程的数据流称为一个管道。 一个文件&#xff0c;可以被多个进程打开吗&#xff1f;可以&#xff0c;那如果一个进程打开文件&#xff0c;往文件里面写数据&#xff0c;另一个进程打开文…

【服务器】RAID(独立磁盘冗余阵列)

RAID&#xff08;独立磁盘冗余阵列&#xff09; 一、RAID的介绍二、RAID的分类#2-1 RAID 02-2 RAID 1#2-3 RAID 32-4 RAID 52-5 RAID 62-6 RAID 10(先做镜像&#xff0c;再做条带化)2-7 RAID 01&#xff08;先做条带&#xff0c;再做镜像&#xff09;2-8 RAID比较 三、磁盘阵列…

设备的层次结构 - 驱动程序的复杂层次结构

由于设备对象的水平结构和垂直结构&#xff0c;组成了Windows设备的树形结构图。在Windows中出事的时候会有一个根设备&#xff0c;为了理解简单&#xff0c;我们将PCI总线想象成根总线&#xff08;根总线其实不是PCI总线&#xff0c;只是为了理解方便&#xff09;。查到PCI总线…

【云原生】Docker如何构建镜像

目录 前言 一、基于已有的镜像创建 步骤一&#xff1a;先基于现有的镜像创建一个容器&#xff0c;然后进入容器去完成修改 步骤二&#xff1a;将该容器作为一个模板提交创建为一个新的镜像 步骤三&#xff1a;基于新的镜像&#xff0c;docker run创建一个容器&#xff0c;进…

leetcode刷题(剑指offer) 297.二叉树的序列化和反序列化

297.二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码

1 雅各布斯塔尔序列 雅各布斯塔尔序列是一个与斐波那契序列类似的加法序列&#xff0c;由递归关系JnJn-12Jn-2定义&#xff0c;初始项J00&#xff0c;J11。序列中的一个数字称为雅可布沙尔数。它们是卢卡斯序列Un&#xff08;P&#xff0c;Q&#xff09;的一种特殊类型&#x…