「推薦」六大免費的Redis記憶體分析工具

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

在我們需要分析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上所占用的空間。如果您的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

「推薦」六大免費的Redis內存分析工具

RDB Tools對於任何一位苛刻的Redis管理員來說都是非常實用的工具套件。我們能夠想到的幾乎所有用例,它都有著對應的工具。在此,我們僅關注它的記憶體分析工具。雖然不像RMA或Redis Sampler那樣全面,但是RDB Tools提供了下面三個方面的重要信息:

「推薦」六大免費的Redis內存分析工具

(1) 列出了所有(序列化)數值大於B字節【B由用戶來指定】的鍵。

「推薦」六大免費的Redis內存分析工具

(2) 最大的N個鍵【N由用戶指定】。

「推薦」六大免費的Redis內存分析工具

(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內存分析工具

Redis-Audit是一種概率工具,您可以用它來快速地獲知記憶體的使用情況。它能夠輸出各種有用的鍵組信息,包括:總體記憶體消耗、組內最大TTL、上一次平均訪問時間、組中過期鍵的百分比等。如果您想找到應用中那些大量消耗記憶體的鍵值組,那麼它就是您的首選工具。

Redis-Audit安裝和使用:

「推薦」六大免費的Redis內存分析工具

您必須事先安裝了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內存分析工具

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

Redis-Audit的優勢:

允許您為鍵值空間和前綴分組定義自己的正則表達式(regex)。適用於Redis的所有版本。

「推薦」六大免費的Redis內存分析工具

如果樣本的大小大於鍵的實際數量,它將遍歷所有的鍵。在另一方面,此操作會使用*鍵,而不使用掃描來阻止其他的操作。

Redis-Audit的劣勢:

由於使用了「DEBUG OBJECT」命令(這在ElastiCache中是不可用的),因此它所報告的序列化大小與RAM上的實際占用會有所不同。由於不是表格的形式,因此其輸出不容易被快速地解析到。

5.Redis Toolkit

「推薦」六大免費的Redis內存分析工具

Redis Toolkit是一種極簡易的監視方案。它可以被用於分析兩類關鍵指標:命中率和記憶體消耗。雖然該項目會定期通過更新來修復bug,但並沒有社區去對它所提供的工具予以支持。

Redis Toolkit的安裝和使用:

「推薦」六大免費的Redis內存分析工具

您的系統上必須先安裝好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

「推薦」六大免費的Redis內存分析工具

這是一款概率采樣的工具,它可以被用於根據鍵的數量來識別十個最大的命名空間和前綴。由於是一款較新的工具,它在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服務,來聯合使用。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!