Когато става въпрос за анализиране на използването на паметта на екземпляр на Redis, на пазара има много безплатни инструменти с отворен код, заедно с малко платени продукти. Някои от най-популярните са Jacks (известни на всички занаяти), но ако търсите по-задълбочен анализ на проблемите си с паметта, може би е по-добре с един от по-целенасочените и по-малко известни инструменти.
В тази публикация съставихме списък с топ 6 безплатни инструмента, които намерихме за най-полезни при анализиране на използването на паметта на нашите екземпляри на Redis:
- Redis Memory Analyzer (RMA)
- Redis Sampler
- RDB инструменти
- Redis-Одит
- Redis Toolkit
- Жътва
1) Redis Memory Analyzer
Redis Memory Analyzer (RMA) е един от най-изчерпателните анализатори на паметта FOSS, налични за Redis. Той поддържа три различни нива на детайлност:
- Глобално – Преглед на информацията за използване на паметта.
- Скенер – Информация за използване на паметта от най-високо ниво на ключово пространство/ниво на префикс – с други думи, използва се най-краткият общ префикс.
- RAM – Ключово пространство/префикс от най-ниско ниво – с други думи, използва се най-дългият общ префикс.
Всеки режим има свои собствени приложения - можете да получите повече подробности в RMA ReadMe.
RMA – Глобален режим
В глобалния режим RMA предоставя някои статистически данни на високо ниво, като броя на ключовете, системната памет, размера на резидентния набор, размера на ключовото пространство и т.н. Уникална функция е „ keyspace overhead“, което е паметта, използвана от системата Redis за съхраняване на информация, свързана с ключовото пространство, като указатели за списъчните структури от данни.
RMA – Режим на скенер
В режим на скенер получаваме общ преглед на нашето ключово пространство. Той дава пространствата за имена от високо ниво (така че a:b:1 и a:c:1 се свързват заедно като a:*), заедно с типовете на неговите елементи и процента памет, консумирана от това пространство от имена. Полезно е да започнете с тази информация и след това да използвате поведението на „RAM“ заедно с модела на пространството от имена, за да направите подробен анализ.
RMA – RAM режим
В режим RAM получаваме консумация на памет на ниво ключово пространство, както се осигурява от повечето други анализатори на паметта FOSS. Така че тук a:b:1 и a:c:1 се приемат отделно като a:b:* и a:c:* и получаваме подробна информация за използваната памет, действителен размер на данните, режийни разходи, кодиране, мин. и максимален TTL , и т.н. Това помага да се определят най-големите паметници в нашата система.
За съжаление, този инструмент не винаги се актуализира (последният комит в GitHub е преди повече от година). Въпреки това, това е едно от най-добрите, които открихме за подробен анализ.
Инсталиране и използване на RMA:
RMA изисква Python и PIP да бъдат инсталирани в системата (и двете са налични за всички основни ОС). След като бъдат инсталирани, можете да изпълните една команда за инсталиране на RDB инструментите – ` pip install rma`
Доста лесно се използва от командния ред. Синтаксисът е `rma [-s HOST] [-p PORT] [-a ПАРОЛА] [-d DB] [-m шаблон за съвпадение] [-l брой ключове за сканиране] [-b ПОВЕДЕНИЕ] [-t-t-разделен със запетая-списък-на-типове-данни за сканиране]`
Професионалисти на RMA:
- Работи в реално време.
- Използва командата за сканиране, за да премине през базата данни, следователно въздействието върху производителността е ограничено и анализът е много точен.
- Добре документирано – лесно се намират примери за употреба.
- Поддържа стабилни опции за персонализиране и филтриране, включително анализиране само на конкретни типове данни или отчитане само на ключове, съответстващи на конкретен модел).
- Може да предоставя подробности на различни нива – пространства от имена, ключове или глобални стойности.
- Уникален сред всички инструменти, които одитирахме по това, че показва режийната структура на данните (тоест колко памет се използва за съхраняване на вътрешна информация на Redis като указателите за списъчния тип данни ).
RMA минуси:
- Не поддържа вероятностна извадка. Линейното сканиране на базата данни може да бъде много бавно за големи бази данни; има опция за спиране на сканирането, след като се върне определен брой ключове, за да се подобри производителността.
- Има много подробности в изхода; макар и полезен за експерти, може да послужи само за объркване на новаците.
2) Redis Sampler
Redis Sampler е много мощен инструмент, който може да даде дълбока представа за използването на паметта на екземпляр на Redis. Поддържа се от antirez, разработчикът зад Redis, и това дълбоко познаване на Redis се вижда в този инструмент. Инструментът не се актуализира много често – но въпреки това не се съобщават много проблеми.
Redis Sampler прави вероятностно сканиране на базата данни и отчита следната информация:
- Процентното разпределение на ключовете между различни типове данни – въз основа на броя на ключовете, а не на размера на обектите.
- Най-големите ключове от тип низ, въз основа на strlen и процента памет, която консумират.
- За всички други типове данни най-големите ключове се изчисляват и показват като два отделни списъка:един въз основа на размера на обекта, а друг въз основа на броя на елементите в обект.
- За всеки тип данни той също показва „Разпределение на мощност 2“. Това е наистина полезно за разбиране на разпределението на размера в даден тип данни. Резултатът основно описва какъв процент ключове от даден тип са с размер в диапазона> 2^x и <=2^x+1.
Инсталиране и използване на Redis Sampler:
Това е един Ruby скрипт. Изисква Ruby да е вече инсталиран. Трябва също да инсталирате скъпоценни камъни `rubygems` и `redis`. Използването е доста просто – от командния ред изпълнете `./redis-sampler.rb `
Професионалисти на Redis Sampler:
- Много лесна за използване – няма опции за проучване и разбиране.
- Изходът е лесен за разбиране, дори за начинаещи, но има достатъчно информация за много подробни анализи на екземпляр на Redis от експерти. Секциите са ясно разграничени и лесни за филтриране.
- Работи във всички версии на Redis.
- Не използва никакви привилегировани команди като DEBUG OBJECT, така че може да се използва във всяка система, включително ElastiCache на Amazon.
- Той използва специфични за типа данни команди за дължина, за да идентифицира размера на данните, така че отчетеното използване не се влияе от сериализацията.
- Работи върху данни в реално време. Въпреки че препоръката е да се изпълнява на интерфейс за обратна връзка, той поддържа вземане на проби от отдалечени системи.
Недостатъци на Redis Sampler:
- Ако размерът на извадката е зададен по-висок от кардиналността на базата данни, тя пак ще използва RANDOMKEYS, а не SCAN.
- Няма налични пакети или Docker изображение. Трябва ръчно да инсталирате зависимости (въпреки че от добрата страна има само 2 зависимости).
- Отчита размера на данните, който не съвпада точно с пространството, заето в RAM, поради режийните разходи за съхранение на структурата на данните.
- Не работи нестандартно, ако вашият екземпляр на Redis изисква удостоверяване. Трябва да модифицирате скрипта, за да вземете парола; в най-простата форма можете да търсите:
redis =Redis.new(:host => ARGV[0], :port => ARGV[1].to_i, :db => ARGV[2].to_i)
и го променете на:
redis =Redis.new(:host => ARGV[0], :port => ARGV[1].to_i, :db => ARGV[2].to_i, :парола => „добавете-своята-парола-тук”)
3) RDB Tools
RDB Tools е много полезен набор от инструменти за всеки сериозен администратор на Redis. Има инструмент за почти всеки случай на употреба, за който можем да се сетим, но в тази публикация ще се концентрираме единствено върху инструмента за анализ на паметта.
Макар че не е толкова изчерпателен като RMA или Redis Sampler, RDB Tools дава 3 важна информация:
1) Всички ключове, при които стойността има (сериализиран) размер по-голям от B байта [B, определен от потребител].
2) Най-големите N клавиши [N посочено от потребителя].
3) Размер на конкретен ключ:това се чете на живо от базата данни.
Този пакет има много активни сътрудници в GitHub и доста често се актуализира. RDB Tools също е добре документиран в интернет. Поддръжникът sripathikrishnan е добре познат в общността на Redis с многото инструменти, които е предоставил през годините.
Инсталиране и използване на RDB инструменти:
RDB Tools изисква Python и PIP да бъдат инсталирани в системата (и двете са налични за всички основни операционни системи). След като бъдат инсталирани, можете да изпълните една команда за инсталиране на RDB инструментите – ` pip install rdbtools python-lz`
Употребата е доста проста:
- За да получите 200 най-големи ключа:rdb -c memory /var/redis/6379/dump.rdb – най-големите 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 файл, който може да се използва с други инструменти на FOSS за лесно създаване на визуализации на данни и може също да бъде импортиран в RDBMS-es за извършване на анализ.
- Много добре документирано.
- Поддържа опции за персонализиране и филтриране, така че можете да получавате по-полезни отчети.
Недостатъци на RDB Tools:
- Техният анализ не работи върху живи данни; трябва да вземете сметище на RDB. В резултат на това отчетеното използване на паметта е сериализираната памет, която не е точно същата като паметта, заета от RAM.
- Той няма вградена поддръжка за групиране, така че не може да намери най-големите пространства от имена.
4) Redis-одит
Redis-Audit е вероятностен инструмент, който е полезен за получаване на бърз преглед на използването на паметта ви. Той извежда полезна информация за ключови групи, като обща консумация на памет, максимален TTL в групата, средно последно време за достъп, процент ключове в групата, които изтичат и т.н. Това е идеалният инструмент, ако трябва да намерите най-много памет- група ключове във вашето приложение.
Инсталиране и използване на Redis-Audit:
Трябва да имате вече инсталирани Ruby и Bundle. Веднъж инсталиран, можете или да клонирате хранилището Redis-Audit в папка, или да изтеглите zip и да го разархивирате в папка. От тази папка стартирайте `bundle install`, за да завършите инсталацията.
Употребата е доста проста:от командния ред изпълнете ` redis-audit.rb име на хост [порт] [парола] [dbnum] [sample_size]`
Професионалисти на Redis-Audit:
- Позволява ви да дефинирате свой собствен регулярен израз за групиране на ключово пространство/префикс.
- Работи във всички версии на Redis.
- Ако размерът на извадката е по-голям от действителния брой ключове, той преминава през всички ключове. От друга страна, тази операция използва клавиши *, а не сканиране – възможно е да блокира други операции.
Против Redis-Audit:
- Използва команда DEBUG OBJECT (недостъпна в ElastiCache); в резултат на това той отчита сериализиран размер – който се различава от действителния размер, зает в RAM.
- Изходът не е много лесен за анализ бързо, тъй като не е табличен.
5) Redis Toolkit
Redis Toolkit е просто решение за наблюдение, което може да се използва за анализ на два ключови показателя:честота на посещения и консумация на памет. Проектът се актуализира периодично за корекции на програмни грешки, но няма поддръжка от общността на някои от по-известните инструменти, които харесват.
Инсталиране и използване на Redis Toolkit:
Трябва да имате инсталиран Docker във вашата система. След това клонирайте хранилището на GitHub (или изтеглете като zip и разархивирайте в папка). От тази папка инсталацията е толкова проста, колкото да изпълните `./redis-toolkit install`.
Използването става само чрез команден ред, чрез серия от прости команди.
- За да започнете да наблюдавате честотата на попадане:./redis-toolkit monitor
- За да отчетете процента на попадане:./redis-toolkit report -name NAME -type hitrate
- За да спрете да наблюдавате честотата на попадане:./redis-toolkit stop
- За да създадете дъмп файла на локална система:./redis-toolkit dump
- За да докладвате за използване на паметта:./redis-toolkit report -type memory -name NAME
Професионалисти на Redis Toolkit:
- Лесен за разбиране интерфейс, който ви дава точната информация, от която се нуждаете.
- Можете ли да групирате префиксите до всяко ниво, което е полезно за вас (така че ако изберете a:b:1 и a:c:1, те се броят като:* или отделно) .
- Работи на всички версии на Redis; не изисква достъп до привилегировани команди като DEBUG OBJECT.
- Добре документирано.
Недостатъци на Redis Toolkit:
- Анализът на паметта не е на живо; тъй като работи върху сериализирания дъмп, отчетеното използване на паметта няма да бъде равно на действителното потребление на RAM.
- Трябва да се създаде дъмп на компютъра, където се изпълнява Redis Toolkit. Ако имате отдалечен екземпляр на Redis, това може да отнеме известно време.
- Наблюдението на честотата на посещения използва командата MONITOR за улавяне на всички команди, които са се изпълнявали на сървъра. Това може да влоши производителността и е възможен риск за сигурността в производството.
- Процентът на посещения се изчислява като |GET| / (|GET| + |SET|). Така че, ако стойността се променя често, нейният процент на попадане ще бъде по-нисък, дори ако никога не е имало действителен пропуск в кеша.
6) Жътва
Това е инструмент за вероятностна извадка, който може да се използва за идентифициране на 10-те най-големи пространства от имена/префикси по отношение на броя на ключовете. Това е един от най-новите инструменти и не е виждал много сцепление в GitHub. Но ако сте начинаещ в Redis, който иска да определи какъв вид данни на приложението запушват вашия екземпляр, не можете да получите нищо по-просто от Harvest.
Инсталиране и използване на реколтата:
Това може да се изтегли като изображение на Docker. След като изображението е готово, можете да стартирате инструмента с помощта на командата „docker run –link redis:redis -it –rm 31z4/harvest redis://redis-URL“ от CLI.
Плюсове за реколтата:
- Работи върху данни в реално време.
- Използва командата „използване на паметта“, за да получи информация за размера; следователно:
- Дава точна информация за размера (вместо сериализиран размер).
- Не изисква достъп до командата DEBUG OBJECT.
- Вашите пространства от имена не трябва да бъдат:(двоеточие) очертани. Harvest идентифицира често срещани префикси, вместо да зависи от разпознаване на пространство от имена, базирано на регулярни изрази.
Недостатъци на реколтата:
- Това е пони с един трик – трудно е да го адаптирате за всеки друг случай на употреба.
- Инструментът работи само с Redis v4.0 и по-нова версия.
- Минимална документация.
Ограничения на безплатния инструмент
Въпреки че намерихме тези инструменти за много полезни за отстраняване на грешки в паметта на нашите екземпляри Redis, трябва да сте наясно с ограниченията на тези безплатни инструменти.
Платените инструменти почти винаги имат някаква визуализация на данни, която не е налична в готово състояние с нито един от инструментите, които одитирахме. Най-доброто, което ще получите, е CSV изход, който можете да използвате други инструменти на FOSS, за да визуализирате, а много инструменти дори нямат тази опция. Това създава стръмна крива на обучение, особено за начинаещи потребители на Redis. Ако е вероятно да правите често анализ на паметта, може да си струва да разгледате платени инструменти, които осигуряват добра визуализация.
Друго ограничение е възможността за съхраняване на историческа информация. В съответствие с общата философия *nix за създаване на малки инструменти, които правят само едно нещо, но го правят добре, инструментите рядко се впускат в пространството за наблюдение. Няма дори графика за консумация на памет във времето и много от тях дори не могат да анализират данни на живо.
Долен ред
Един единствен инструмент вероятно няма да е достатъчен за всичките ви нужди, но те са доста страхотни оръжия, които да имате в арсенала си, съчетани с възможностите за наблюдение предоставено от DBaaS решения като хостинг на ScaleGrid за Redis™*! За да научите повече за страхотните инструменти, налични с нашите напълно управлявани хостинг услуги за Redis™, разгледайте нашата страница ScaleGrid за Redis™ по план.