在分析Redis实例的内存使用情况时,市场上有许多免费和开源工具,以及少量的付费产品。最受欢迎的工具是Jacks(各行各业),但是如果您想对内存问题进行更深入的分析,则最好使用针对性更强,鲜为人知的工具。
这里汇总了几种有用的免费工具,这些工具在分析Redis实例的内存使用情况时很有用。
1. Redis内存分析器(RMA)
RMA是可用于Redis的最全面的FOSS内存分析器之一。它支持三种不同级别的详细分析。全局-内存使用信息概述;扫描(Scanner)-最高级别的键空间/前缀级别的内存使用信息,即使用最短的公共前缀;RAM-最低级别的键空间/前缀,即使用最长的公共前缀。
在全局模式下,RMA提供一些高级统计信息,例如密钥数,系统内存,常驻集大小,密钥空间大小等。唯一的功能是“密钥空间开销”,即Redis系统使用的内存存储与键空间有关的信息,例如列表数据结构的指针;
在扫描模式下,获得密钥空间的概述。它提供了高级名称空间,以及其项的类型和该名称空间消耗的内存百分比。然后将“ RAM”行为与名称空间模式结合使用进行详细的分析非常有用。
在RAM模式下,可获得其他大多数FOSS内存分析器提供的键空间级内存消耗。将获得有关所用内存,实际数据大小,开销,编码,最小和最大的详细信息,TTL等。这有助于查明系统中最大的内存消耗是什么。
虽然该工具并非总是更新,GitHub上的最后一次提交是一年多以前了。但即便这样,它也是进行内存详细分析的最佳方法之一。
2. Redis Sampler
Redis Sampler是一个非常强大的工具,可以深入了解Redis实例的内存使用情况。它由Redis背后的开发人员antirez维护,并且对Redis的深入了解通过此工具得以体现。该工具的更新频率不是很高,但是报告的问题并不多。
Redis Sampler对数据库进行概率扫描,并报告以下信息:
- 键在各种数据类型中的百分比分布-基于键的数量,而不是对象的大小。
- 基于strlen的字符串类型的最大键,以及它们消耗的内存百分比。
- 对于所有其他数据类型,最大的键被计算并显示为两个单独的列表:一个基于对象的大小,另一个基于对象中的项目数。
- 对于每种数据类型,它还显示“Power of 2 distribution”。这对于理解数据类型内的大小分布非常有用。输出基本上详细说明给定类型的键的大小百分比在>2^x和<=2^x+1范围内。
3. RDB工具
对于Redis管理员来说,RDB工具是非常有用的工具套件。RDB工具虽然不如RMA或Redis Sampler全面,但它提供了3条重要信息。
1.所有键的值(序列化)的大小都大于B字节[用户指定的B]。2.最大N键[用户指定N];3.特定密钥的大小:这是从数据库实时读取的。
该套件在GitHub上有许多活跃的参与者,并且经常更新。维护者Sripathi Krishnan多年来在Redis社区中广为人知,因为他提供了许多工具。
4. Redis-Audit
Redis-Audit是一个概率性工具,可用于快速了解内存使用情况。它会输出有关密钥组的有用信息,例如总体内存消耗,该组中的最大TTL,平均上次访问时间,该组中过期的密钥百分比等。如果你需要找到占用最多的内存,这是一个完美的工具。它可在你的应用程序中切换密钥组。而且,它适用于所有Redis版本。
5. Redis工具包
Redis Toolkit是一个基本的监控解决方案,可用于分析两个关键指标:命中率和内存消耗。该项目会定期更新,以进行错误修复。它有易于理解的界面来为你提供所需的确切信息,而且适用于所有Redis版本。
6. Harvest
Harvest是一个概率抽样工具,可用于根据键的数量识别10个最大的名称空间/前缀。作为一款新工具,它在GitHub上并没有吸引太多关注。但是,如果你是Redis的新手,希望确定哪种应用程序数据阻塞了实例,Harvest上手还是不错的。它仅适用于Redis v4.0及更高版本。
不得不说的免费工具限制
尽管这些工具对于调试Redis实例的内存问题非常有用,但应该意识到这些免费工具的局限性。付费工具具有某种形式的数据可视化,而以上这些工具都不是开箱即用的。最好的结果是CSV输出,可以使用其他FOSS工具进行可视化,而且许多工具甚至都没有该选项,这使学习曲线变得陡峭,特别是对于Redis新手用户。如果你可能经常进行内存分析,那么值得看一下提供良好可视化功能的付费工具。
另一个限制是存储历史信息的能力,也没有随时间变化的内存消耗图,而且许多甚至无法分析实时数据。