【推薦】六大免費(fèi)的Redis內(nèi)存分析工具
譯文【51CTO.com快譯】在我們需要分析Redis實(shí)例的內(nèi)存使用情況時(shí),市場上有著許多免費(fèi)的開源工具,同時(shí)也有少量的付費(fèi)產(chǎn)品。如果您想更深層次地分析內(nèi)存相關(guān)問題的話,就可能需要用到一些更具針對性的“獨(dú)門”工具了。
我們在本文中為您推薦了六種實(shí)用工具,它們曾被我們用來分析自己的Redis實(shí)例。它們分別是:
- Redis Memory Analyzer(Redis內(nèi)存分析器,RMA)
- Redis Sampler(Redis采樣器)
- RDB Tools(RDB 工具集)
- Redis-Audit(Redis-審計(jì))
- Redis Toolkit(Redis工具包)
- Harvest
1.Redis Memory Analyzer
在Redis內(nèi)存分析領(lǐng)域,RMA(Redis內(nèi)存分析器)是最全面的FOSS(譯者注:Free and Open Source Software,免費(fèi)且開源的軟件)之一。它支持三種不同的級別模式,分別是:
- 全局 – 顯示內(nèi)存使用信息的概述。
- 掃描器 – 顯示***級別鍵值空間(keyspace)和前綴(prefix)的內(nèi)存使用信息 - 換言之,使用最短的通用前綴(common prefix)。
- RAM – 顯示***級鍵值空間和前綴 - 換言之,使用最長的通用前綴。
每一種模式都有自己的用途,您可以在RMA的自述文件(https://github.com/gamenet/redis-memory-analyzer/blob/master/README.rst)中獲取進(jìn)一步的詳細(xì)信息.
RMA - 全局模式
在全局模式下,RMA 提供了一些高級別的統(tǒng)計(jì)信息,如鍵數(shù)、系統(tǒng)內(nèi)存、駐留集的大小、鍵值空間的大小等。值得一提的是其特殊功能:“鍵值空間開銷”,這是Redis系統(tǒng)用來存儲與鍵值空間相關(guān)信息的內(nèi)存數(shù)量,例如列表數(shù)據(jù)結(jié)構(gòu)中的指針數(shù)量。
RMA - 掃描器模式
在掃描器模式中,我們能夠獲取鍵值空間的概述。它給出了高級別的命名空間(因此,a:b:1和a:c:1合并為a:*),同時(shí)帶有各種條目的類型,及其命名空間所占用內(nèi)存的百分比。該模式可作為分析的起點(diǎn),然后使用下面的“RAM”模式進(jìn)行詳細(xì)的分析。
RMA - RAM模式
在RAM模式下,我們得到鍵值空間級別的內(nèi)存開銷值,當(dāng)然大多數(shù)其他開源的內(nèi)存分析工具也能提供。因此,此處將a:b:1和a:c:1分別當(dāng)作a:b:*和a:c:*,我們從而得到有關(guān)內(nèi)存使用、實(shí)際數(shù)據(jù)大小、開銷、編碼、最小和***TTL等方面的詳細(xì)信息。這些都有助于我們查出那些系統(tǒng)中內(nèi)存消耗“大戶”。
不過,此工具長久未被更新了(在GitHub上的***一次提交是在一年多以前)。即便如此,它仍然是我們進(jìn)行詳細(xì)分析的***工具之一。
RMA的安裝和使用:
RMA需要在系統(tǒng)上事先安裝好Python和PIP(譯者注:Python的包管理工具),兩者一般都被預(yù)安裝在了主流的操作系統(tǒng)之上。安裝完畢后,您可以執(zhí)行一條“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的優(yōu)勢:
- 能夠?qū)崟r(shí)運(yùn)行。
- 使用掃描命令來遍歷數(shù)據(jù)庫,因此它對性能的影響是有限的,但分析的準(zhǔn)確度較高。
- 有很好的支持文檔,很容易找到使用示例。
- 支持自定義和篩選功能,包括只分析特定的數(shù)據(jù)類型,或只是考慮與特定模式相匹配的鍵值。
- 能提供不同級別的詳細(xì)信息,包括:命名空間、鍵值或全局值。
- 相對其他工具,它具有一項(xiàng)特殊的功能:可以顯示數(shù)據(jù)結(jié)構(gòu)的開銷(即,Redis系統(tǒng)用來存儲與鍵值空間相關(guān)信息的內(nèi)存數(shù)量,例如列表數(shù)據(jù)結(jié)構(gòu)中的指針數(shù)量)。
RMA的劣勢:
- 不支持概率采樣。對于大型數(shù)據(jù)庫來說,其線性掃描數(shù)據(jù)庫的方式可能會(huì)非常緩慢。為了提高性能,我們可以在返回了一定數(shù)量的鍵值后,選擇中止掃描。
- 輸出中帶有太多的細(xì)節(jié)。雖然對專家有用,但它也可能給新手帶來混淆。
2.Redis Sampler
Redis Sampler是一款非常強(qiáng)大的工具,可以讓我們深入了解Redis實(shí)例的內(nèi)存使用情況。它是由Redis背后的開發(fā)人員antirez(https://github.com/antirez)所維護(hù)。我們能從該工具中看到他對Redis的深入了解。該工具不常被更新,當(dāng)然也鮮有問題報(bào)告被爆出。
Redis Sampler對數(shù)據(jù)庫執(zhí)行的是概率掃描,并能報(bào)告以下的信息:
- 鍵值在各種數(shù)據(jù)類型之間的百分比分布(基于鍵值的數(shù)量,而不是對象的大?。?/li>
- 字符串類型的***鍵,基于strlen,以及它們所消耗的內(nèi)存百分比。
- 對于所有其他數(shù)據(jù)類型,它計(jì)算出***鍵、并顯示到兩個(gè)單獨(dú)的列表中:一個(gè)是基于對象的大??;另一個(gè)是基于對象的項(xiàng)數(shù)。
- 對于每種數(shù)據(jù)類型,它還能顯示“2的冪分布”。這對于我們了解數(shù)據(jù)類型的大小分布是非常有用的。其輸出能夠詳細(xì)地說明給定類型鍵值的百分比區(qū)間,即:> 2^x和 <= 2^x+1。
Redis Sampler的安裝和使用:
由于是一個(gè)單獨(dú)的Ruby腳本,因此它要求Ruby已完成了安裝。同時(shí),您還需要安裝好“rubygems”和“redis gems”。它的用法非常簡單,只需執(zhí)行命令“./redis-sampler.rb”便可。
Redis Sampler的優(yōu)勢:
- 非常簡單易用,沒有查找和需要理解的選項(xiàng)。
- 即使是新手也很容易讀懂它的輸出。同時(shí),它也能提供足夠多的信息,供技術(shù)專家對Redis的實(shí)例進(jìn)行詳細(xì)分析。其顯示區(qū)域的布局比較清晰,且能夠進(jìn)行過濾。
- 適用于Redis的所有版本。
- 由于沒有用到任何諸如DEBUG OGJECT的特權(quán)命令,因此它可以被應(yīng)用到包括亞馬遜 ElastiCache在內(nèi)的任何系統(tǒng)之上。
- 它使用特定數(shù)據(jù)類型長度的命令來識別數(shù)據(jù)大小,因此其報(bào)告并不受序列化的影響。
- 適用于實(shí)時(shí)數(shù)據(jù)。雖然該工具建議是在環(huán)回接口上運(yùn)行,但其實(shí)它也能支持對遠(yuǎn)程系統(tǒng)的采樣。
Redis Sampler的劣勢:
- 如果其采樣頻率的設(shè)置高于數(shù)據(jù)庫的本身基數(shù)(cardinality),那么它將仍然使用隨機(jī)鍵值(RANDOMKEYS)而不是掃描(SCAN)模式。
- 沒有現(xiàn)成可用的bundle或Docker的圖像。您必須手動(dòng)安裝其相應(yīng)的依賴項(xiàng)(好在只有兩個(gè)依賴關(guān)系項(xiàng))。
- 由于數(shù)據(jù)結(jié)構(gòu)有著不同的存儲開銷,因此報(bào)告中的數(shù)據(jù)大小并不能完全匹配RAM上所占用的空間。
- 如果您的Redis實(shí)例需要身份驗(yàn)證的話,它無法做到開箱即用(out-of-the-box)。您需要修改腳本以適應(yīng)密碼的需求。最簡單形式是: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管理員來說都是非常實(shí)用的工具套件。我們能夠想到的幾乎所有用例,它都有著對應(yīng)的工具。在此,我們僅關(guān)注它的內(nèi)存分析工具。雖然不像RMA或Redis Sampler那樣全面,但是RDB Tools提供了下面三個(gè)方面的重要信息:
(1) 列出了所有(序列化)數(shù)值大于B字節(jié)【B由用戶來指定】的鍵。
(2) ***的N個(gè)鍵【N由用戶指定】。
(3) 特定鍵的大?。哼@是從數(shù)據(jù)庫中實(shí)時(shí)讀取的。
該套件在GitHub上有許多活躍的貢獻(xiàn)者,因此它能經(jīng)常保持更新。在互聯(lián)網(wǎng)上我們也能找到RDB Tools的相關(guān)文檔。其維護(hù)者是Sripathi Krishnan(https://github.com/sripathikrishnan?tab=repositories)。眾所周知,他多年來為Redis社區(qū)提供了許多工具。
RDB Tools的安裝和使用:
RDB Tools需要在系統(tǒng)上事先安裝好Python和PIP,兩者一般都被預(yù)安裝在了主流操作的系統(tǒng)之上。安裝完畢后,您可以執(zhí)行一條“pip install rdbtools python-lz”的命令來安裝RDB工具。
其用法非常簡單:
- 獲取前200個(gè)***鍵:rdb -c memory /var/redis/6379/dump.rdb –largest 200 -f memory.csv
- 獲取所有大于128字節(jié)的鍵值:rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
- 獲取鍵值的大?。簉edis-memory-for-key -s localhost -p 6379 -a mypassword person:1
RDB Tools的優(yōu)勢:
- 輸出的CSV文件,可被其他開源工具所使用,從而方便地實(shí)現(xiàn)數(shù)據(jù)可視化,同時(shí)也能導(dǎo)入RDBMS中予以分析。
- 具有良好的支持文檔。
- 支持自定義和篩選選項(xiàng),您可以籍此獲得更加有用的報(bào)告。
RDB Tools的劣勢:
- 不能分析實(shí)時(shí)數(shù)據(jù),而且您必須獲取RDB dump文件。因此,它報(bào)告的是序列化內(nèi)存的使用率,并非精確地顯示RAM上所占用的內(nèi)存。
- 它并不支持任何內(nèi)置的分組,因此無法找到***的命名空間。
4.Redis-Audit
Redis-Audit是一種概率工具,您可以用它來快速地獲知內(nèi)存的使用情況。它能夠輸出各種有用的鍵組信息,包括:總體內(nèi)存消耗、組內(nèi)***TTL、上一次平均訪問時(shí)間、組中過期鍵的百分比等。如果您想找到應(yīng)用中那些大量消耗內(nèi)存的鍵值組,那么它就是您的***工具。
Redis-Audit安裝和使用:
您必須事先安裝了Ruby和Bundle(https://bundler.io/)。安裝完成之后,您可以將Redis-Audit的存儲庫(https://github.com/snmaynard/redis-audit.git)克隆到某個(gè)文件夾,或是下載zip工具(https://github.com/snmaynard/redis-audit/archive/master.zip)并解壓縮到那里。在該文件夾中,您可以運(yùn)行“bundle install”來完成安裝。
它的用法非常簡單,你可以直接在命令行中輸入“execute”
redis-audit.rb hostname [port] [password] [dbnum] [sample_size]
Redis-Audit的優(yōu)勢:
- 允許您為鍵值空間和前綴分組定義自己的正則表達(dá)式(regex)。
- 適用于Redis的所有版本。
- 如果樣本的大小大于鍵的實(shí)際數(shù)量,它將遍歷所有的鍵。在另一方面,此操作會(huì)使用*鍵,而不使用掃描來阻止其他的操作。
Redis-Audit的劣勢:
- 由于使用了“DEBUG OBJECT”命令(這在ElastiCache中是不可用的),因此它所報(bào)告的序列化大小與RAM上的實(shí)際占用會(huì)有所不同。
- 由于不是表格的形式,因此其輸出不容易被快速地解析到。
5.Redis Toolkit
Redis Toolkit是一種極簡易的監(jiān)視方案。它可以被用于分析兩類關(guān)鍵指標(biāo):***率和內(nèi)存消耗。雖然該項(xiàng)目會(huì)定期通過更新來修復(fù)bug,但并沒有社區(qū)去對它所提供的工具予以支持。
Redis Toolkit的安裝和使用:
您的系統(tǒng)上必須先安裝好Docker。然后,克隆它的GitHub存儲庫(https://github.com/alexdicianu/redis_toolkit.git)或下載并解壓到某個(gè)文件夾中。在該文件夾里,您可以通過執(zhí)行“./redis-toolkit install.”來完成簡單的安裝。
以下是一些純命令行的簡單操作:
- 開始監(jiān)視***率:./redis-toolkit monitor
- 報(bào)告***率:./redis-toolkit report -name NAME -type hitrate
- 停止監(jiān)視***率:./redis-toolkit stop
- 在本地系統(tǒng)上創(chuàng)建dump文件:./redis-toolkit dump
- 報(bào)告內(nèi)存使用情況:./redis-toolkit report -type memory -name NAME
Redis Toolkit的優(yōu)勢:
- 能夠通過易用的界面,向您提供準(zhǔn)確的信息。
- 能夠?qū)⑶熬Y分組為任何適合您的級別(因此,如果選取a:b:1和a:c:1,那么它既可以算作a:*、也可以單獨(dú)計(jì)算)。
- 適用于Redis的所有版本,同時(shí)不需要訪問諸如DEBUG OBJECT之類的特權(quán)命令。
- 具有良好的支持文檔。
Redis Toolkit的劣勢:
- 由于它工作在序列化的dump模式,因此無法進(jìn)行實(shí)時(shí)的內(nèi)容分析。同樣,它報(bào)告的內(nèi)存使用量也并非完全等同于RAM的實(shí)際消耗量。
- 在Redis Toolkit運(yùn)行時(shí),計(jì)算機(jī)會(huì)創(chuàng)建一個(gè)dump文件。如果您訪問的是一個(gè)Redis的遠(yuǎn)程實(shí)例,那么就可能需要一段時(shí)間才能完成。
- 使用MONITOR命令來監(jiān)視***率,以捕獲在服務(wù)器上運(yùn)行的所有命令。那么在生產(chǎn)環(huán)境中,這樣可能會(huì)降低性能,并帶來安全風(fēng)險(xiǎn)。
- 由于它是通過|GET| / (|GET| + |SET|)來計(jì)算***率的,因此如果某個(gè)數(shù)值經(jīng)常發(fā)生變化,就算沒有錯(cuò)過任何真實(shí)的緩存,那么它的***率也會(huì)有所降低。
6.Harvest
這是一款概率采樣的工具,它可以被用于根據(jù)鍵的數(shù)量來識別十個(gè)***的命名空間和前綴。由于是一款較新的工具,它在GitHub上的關(guān)注度并不高。然而,如果您是一名想找到自己的實(shí)例中哪些應(yīng)用數(shù)據(jù)有擁塞的Redis新手,那么Harvest對您來說就非常最容易上手。
Harvest的安裝和使用:
您可以通過鏈接:https://hub.docker.com/r/31z4/harvest/來下載它的Docker鏡像。一旦鏡像準(zhǔn)備就緒,您就可以在CLI中使用“docker run --link redis:redis -it --rm 31z4/harvest redis://redis-URL”的命令來運(yùn)行該工具。
Harvest的優(yōu)勢:
- •適用于實(shí)時(shí)數(shù)據(jù)。
- •使用“memory usage”命令來獲取內(nèi)存信息。因此它既能夠提供精確的數(shù)量信息(而不是序列化大?。?,又不需要訪問DEBUG OBJECT的命令。
- •您的命名空間不需要用冒號來區(qū)分開來。Harvest能夠識別常見的前綴,而不是依靠正則表達(dá)式來進(jìn)行命名空間的識別。
Harvest的劣勢:
- 很難適用于任何其他類型的用例。
- 該工具僅適用于Redis v4.0及以上版本。
- 其支持文檔非常少。
免費(fèi)工具的局限性
雖然我們在此列舉的工具對于調(diào)試Redis實(shí)例的內(nèi)存問題非常實(shí)用,但是您也應(yīng)該知道這些免費(fèi)工具的一些局限性。
付費(fèi)工具一般總能提供某些數(shù)據(jù)的可視化功能,但是我們在此所列舉的工具卻無法實(shí)現(xiàn)開箱即用。它們頂多給您輸出CSV文件,以供其他開源軟件進(jìn)一步實(shí)現(xiàn)可視化,當(dāng)然許多工具甚至連此類輸出都不具備。這就給Redis的新手用戶帶來了“陡峭”的學(xué)習(xí)曲線。因此,如果您需要經(jīng)常進(jìn)行內(nèi)存分析的話,那么您***選用能夠提供良好的可視化功能的付費(fèi)工具。
另一個(gè)局限性是它們存儲歷史信息的能力。和那些*nix的設(shè)計(jì)理念一樣,這些工具只專注于某個(gè)方面并能其做到***,但是它們鮮少涉獵整個(gè)監(jiān)控領(lǐng)域。它們既不能提供一段時(shí)間的內(nèi)存消耗曲線圖,也無法分析實(shí)時(shí)的數(shù)據(jù)。
選擇的底線
雖然單個(gè)工具的確無法滿足您的所有需求,但是它們可以作為您的“武器庫”中的常備“武器”,來配合諸如:ScaleGrid的Redis hosting(https://scalegrid.io/redis/products.html)之類具有監(jiān)控能力的DBaaS服務(wù),來聯(lián)合使用。
原文標(biāo)題:The Top 6 Free Redis Memory Analysis Tools ,作者: Aparajita Raychaudhury
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】