Redisインスタンスのメモリ使用量の分析に関しては、市場には無料のオープンソースツールがたくさんあり、有料の製品もたくさんあります。最も人気のあるもののいくつかは(すべての業界で有名な)ジャックですが、メモリの問題のより深い分析を探している場合は、よりターゲットを絞った、あまり知られていないツールの1つを使用したほうがよいかもしれません。
この投稿では、Redisインスタンスのメモリ使用量の分析に最も役立つと思われる無料ツールのトップ6のリストをまとめました。
- Redisメモリアナライザー(RMA)
- Redisサンプラー
- RDBツール
- Redis-監査
- Redisツールキット
- 収穫
1)Redisメモリアナライザー
Redisメモリアナライザー(RMA)は、Redisで利用できる最も包括的なFOSSメモリアナライザーの1つです。 3つの異なるレベルの詳細をサポートします:
- グローバル –メモリ使用量情報の概要。
- スキャナー –最高レベルのキースペース/プレフィックスレベルのメモリ使用量情報–つまり、最短の共通プレフィックスが使用されます。
- RAM –最低レベルのキースペース/プレフィックス–つまり、最長の共通プレフィックスが使用されます。
各モードには独自の用途があります。詳細については、RMAのReadMeを参照してください。
RMA –グローバルモード
グローバルモードでは、RMAは、キーの数、システムメモリ、常駐セットサイズ、キースペースサイズなど、いくつかの高レベルの統計情報を提供します。 「キースペースオーバーヘッド」は、リストデータ構造へのポインタなどのキースペース関連情報を格納するために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での最後のコミットは1年以上前です)。それでも、これは詳細な分析で見つけた最高の1つです。
RMAのインストールと使用法:
RMAでは、PythonとPIPがシステムにインストールされている必要があります(どちらもすべての主要なOSで使用できます)。インストールしたら、1つのコマンドを実行してRDBツールをインストールできます– `pip install rma`
コマンドラインから使用するのは非常に簡単です。構文は`rma[-s HOST] [-p PORT] [-a PASSWORD] [-d DB] [-m pattern-to-match] [-l number-of-keys-to-scan] [-b動作][-tcomma-separated-list-of-data-types-to-scan]`
RMAの長所:
- リアルタイムで機能します。
- scanコマンドを使用してデータベースをウォークスルーするため、パフォーマンスへの影響は限定的であり、分析は非常に正確です。
- 十分に文書化されています–使用例を見つけるのは簡単です。
- 特定のデータ型のみの分析や、特定のパターンに一致するキーのみの検討など、堅牢なカスタマイズとフィルタリングのオプションをサポートします。
- 名前名、キー、グローバル値など、さまざまなレベルで詳細を提供できます。
- 監査したすべてのツールの中でユニークで、データ構造のオーバーヘッド(つまり、リストデータ型のポインターなどの内部Redis情報を格納するために使用されるメモリの量)を示します。 。
RMAの短所:
- 確率的サンプリングをサポートしていません。大規模なデータベースの場合、データベースの線形スキャンは非常に遅くなる可能性があります。パフォーマンスを向上させるために、特定の数のキーが返されたときにスキャンを停止するオプションがあります。
- 出力には多くの詳細があります。専門家には役立ちますが、初心者を混乱させるだけの場合もあります。
2)Redisサンプラー
Redisサンプラーは、Redisインスタンスのメモリ使用量を詳細に把握できる非常に強力なツールです。これは、Redisの開発者であるantirezによって維持されており、Redisに関する深い知識がこのツールに表れています。ツールはあまり頻繁に更新されませんが、とにかく報告される問題は多くありません。
Redisサンプラーはデータベースの確率的スキャンを実行し、次の情報を報告します:
- オブジェクトのサイズではなく、キーの数に基づく、さまざまなデータ型間でのキーの割合の分布。
- strlenに基づく、string型の最大のキー、およびそれらが消費するメモリの割合。
- 他のすべてのデータ型の場合、最大のキーが計算され、2つの別々のリストとして表示されます。1つはオブジェクトのサイズに基づいており、もう1つはアイテムの数に基づいています。オブジェクト。
- すべてのデータ型について、「Powerof2distribution」も表示されます。これは、データ型内のサイズ分布を理解するのに非常に役立ちます。出力には、基本的に、特定のタイプのキーの何パーセントが> 2^xから<=2^ x+1の範囲のサイズであるかが詳細に示されます。
Redisサンプラーのインストールと使用法:
これは単一のRubyスクリプトです。 Rubyがすでにインストールされている必要があります。また、`rubygems`と`redis`gemをインストールする必要があります。使用法は非常に簡単です–コマンドラインから `./redis-sampler.rb`
を実行しますRedisサンプラーの長所:
- 非常に使いやすく、調査して理解するためのオプションはありません。
- 出力は初心者でも理解しやすいですが、専門家によるRedisインスタンスの非常に詳細な分析に十分な情報があります。セクションは明確に区切られており、簡単に除外できます。
- すべてのRedisバージョンで動作します。
- DEBUG OBJECTのような特権コマンドを使用しないため、AmazonのElastiCacheを含むすべてのシステムで使用できます。
- データ型固有の長さコマンドを使用してデータサイズを識別するため、報告される使用量はシリアル化の影響を受けません。
- ライブデータで動作します。ループバックインターフェイスで実行することをお勧めしますが、リモートシステムのサンプリングをサポートしています。
Redisサンプラーの短所:
- サンプルサイズがデータベースのカーディナリティよりも高く設定されている場合でも、SCANではなくRANDOMKEYSが使用されます。
- 利用可能なバンドルまたは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、: password =>“ add-your-password-here”)
3)RDBツール
RDBツールは、真面目なRedis管理者にとって非常に便利なツールスイートです。考えられるほぼすべてのユースケースに対応するツールがありますが、この投稿では、メモリ分析ツールのみに焦点を当てます。
RMAやRedisSamplerほど包括的ではありませんが、RDBToolsは3を提供します。重要な情報:
1)値が(シリアル化された)サイズがBバイトより大きいすべてのキー[Bで指定ユーザー]。
2)最大のN個のキー[ユーザーが指定したN]。
3)特定のキーのサイズ:これはデータベースからライブで読み取られます。
このスイートには、GitHubに多くのアクティブな貢献者がいて、かなり頻繁に更新されます。 RDBツールもインターネット上で十分に文書化されています。メンテナのsripathikrishnanは、Redisコミュニティで、彼が長年にわたって提供してきた多くのツールでよく知られています。
RDBツールのインストールと使用法:
RDBツールでは、PythonとPIPがシステムにインストールされている必要があります(どちらもすべての主要なOSで使用できます)。インストールしたら、1つのコマンドを実行してRDBツールをインストールできます– `pip install rdbtools python-lz`
使用法は非常に簡単です:
- 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ツールの長所:
- CSVファイルを出力します。このファイルは、他のFOSSツールで使用してデータの視覚化を簡単に作成でき、RDBMS-esにインポートして分析を実行することもできます。
- 非常によく文書化されています。
- カスタマイズとフィルタリングのオプションをサポートしているため、より便利なレポートを入手できます。
RDBツールの短所:
- それらの分析はライブデータでは機能しません。 RDBダンプを取る必要があります。その結果、報告されるメモリ使用量はシリアル化されたメモリであり、RAMで占有されているメモリとまったく同じではありません。
- グループ化のサポートが組み込まれていないため、最大の名前名を見つけることができません。
4)Redis-監査
Redis-Auditは、メモリ使用量の概要をすばやく把握するのに役立つ確率的なツールです。全体的なメモリ消費量、グループ内の最大TTL、平均最終アクセス時間、期限切れになるグループ内のキーの割合など、キーグループに関する有用な情報を出力します。これは、最も多くのメモリを見つける必要がある場合に最適なツールです。アプリケーションのキーグループを占有します。
Redis-監査のインストールと使用法:
Rubyとバンドルがすでにインストールされている必要があります。インストールしたら、Redis-Auditリポジトリをフォルダーに複製するか、zipをダウンロードしてフォルダーに解凍します。そのフォルダから、`bundleinstall`を実行してインストールを完了します。
使用法は非常に簡単です。コマンドラインから、 `redis-audit.rb hostname [port] [password] [dbnum] [sample_size]`
を実行します。
Redis-監査の長所:
- キースペース/プレフィックスのグループ化に独自の正規表現を定義できます。
- すべてのRedisバージョンで動作します。
- サンプルサイズが実際のキー数よりも大きい場合は、すべてのキーをウォークスルーします。反対に、この操作ではスキャンではなくキー*を使用し、他の操作をブロックする可能性があります。
Redis-監査の短所:
- DEBUG OBJECTコマンドを使用します(ElastiCacheでは使用できません)。その結果、シリアル化されたサイズが報告されます。これは、RAMで占有されている実際のサイズとは異なります。
- 出力は表形式になっていないため、すばやく解析するのは簡単ではありません。
5)Redis Toolkit
Redis Toolkitは、ヒット率とメモリ消費量という2つの主要な指標を分析するために使用できる必要最低限の監視ソリューションです。プロジェクトはバグ修正のために定期的に更新されますが、有名なツールのいくつかをコミュニティがサポートしていません。
Redis Toolkitのインストールと使用法:
システムにDockerがインストールされている必要があります。次に、GitHubリポジトリのクローンを作成します(またはzipとしてダウンロードし、フォルダーに解凍します)。そのフォルダからのインストールは、`./redis-toolkitinstall`を実行するのと同じくらい簡単です。
使用法は、一連の単純なコマンドを介して、純粋にコマンドラインを介して行われます。
- ヒット率の監視を開始するには:./ 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を選択した場合、それらはa:*または個別にカウントされます) 。
- すべてのRedisバージョンで動作します。 DEBUGOBJECTのような特権コマンドへのアクセスを必要としません。
- 十分に文書化されています。
Redis Toolkitの短所:
- メモリ分析はライブではありません。シリアル化されたダンプで機能するため、報告されるメモリ使用量は実際のRAM消費量と等しくなりません。
- RedisToolkitを実行しているコンピューターでダンプを作成する必要があります。リモートRedisインスタンスがある場合、これにはしばらく時間がかかることがあります。
- ヒット率の監視では、MONITORコマンドを使用して、サーバーで実行されたすべてのコマンドをキャプチャします。これはパフォーマンスを低下させる可能性があり、本番環境でのセキュリティリスクの可能性があります。
- ヒット率は|GET|として計算されます/(| GET | + | SET |)。したがって、値が頻繁に変更されると、実際のキャッシュミスが発生していなくても、ヒット率は低くなります。
6)収穫
これは確率的なサンプリングツールであり、キーの数に関して10個の最大の名前名/プレフィックスを識別するために使用できます。これは最新のツールの1つであり、GitHubではあまり注目されていません。ただし、インスタンスを詰まらせているアプリケーションデータの種類を特定しようとしているRedisの初心者の場合、Harvestよりも簡単なものを入手することはできません。
収穫のインストールと使用法:
これはDockerイメージとしてダウンロードできます。イメージの準備ができたら、CLIから「dockerrun –link redis:redis -it –rm 31z4 / harvestredis://redis-URL」コマンドを使用してツールを実行できます。
収穫の長所:
- ライブデータで動作します。
- 「メモリ使用量」コマンドを使用してサイズ情報を取得します。したがって:
- シリアル化されたサイズではなく、正確なサイズ情報を提供します。
- DEBUGOBJECTコマンドにアクセスする必要はありません。
- 名前名を:(コロン)で区切る必要はありません。 Harvestは、正規表現ベースの名前空間認識に依存するのではなく、一般的なプレフィックスを識別します。
収穫の短所:
- これはワントリックのポニーであり、他のユースケースに適応させるのは困難です。
- このツールは、Redisv4.0以降でのみ機能します。
- 最小限のドキュメント。
無料のツール制限
これらのツールはRedisインスタンスのメモリの問題をデバッグするのに非常に便利ですが、これらの無料ツールの制限に注意する必要があります。
有料ツールには、ほとんどの場合、ある種のデータ視覚化機能があります。これは、監査したどのツールでもすぐに使用することはできません。最高のものは、他のFOSSツールを使用して視覚化できるCSV出力であり、多くのツールにはそのオプションすらありません。これは、特に初心者のRedisユーザーにとって、急な学習曲線になります。メモリ分析を頻繁に行う可能性がある場合は、優れた視覚化を提供する有料ツールを検討する価値があるかもしれません。
もう1つの制限は、履歴情報を保存する機能です。たった1つのことを実行するが、それをうまく実行する小さなツールを作成するという一般的な* nixの哲学に沿って、ツールが監視スペースに参入することはめったにありません。時間の経過に伴うメモリ消費量のグラフすらなく、多くの人はライブデータを分析することさえできません。
結論
1つのツールですべてのニーズに対応できるとは限りませんが、監視機能と組み合わせると、武器庫に入れるのに非常に優れた武器になります。 ScaleGridのRedis™*用ホスティングなどのDBaaSソリューションによって提供されます。 Redis™のフルマネージドホスティングサービスで利用できる優れたツールの詳細については、Redis™のScaleGrid機能のプラン別ページをご覧ください。