Redisの問題をトラブルシューティングする方法
はじめに。
Redisはオープンソースであり、メモリ内のキーバリューデータストアです。トラブルシューティングやデバッグの問題に役立ついくつかのコマンドが付属しています。Redisはメモリ内のキーバリューストアという性質上、メモリ管理に焦点を当てたコマンドが多くありますが、Redisサーバーの状態の概要を提供するために役立つ他のコマンドもあります。このチュートリアルでは、Redisの使用中に遭遇する可能性のある問題の診断と解決に役立ついくつかのコマンドの使用方法について詳細を説明します。
このガイドの使い方
このガイドは、自己完結型の例を使ったチートシートとして書かれています。どのセクションでも貴方の完了しようとしているタスクに関連するセクションに飛ぶことをお勧めします。
このガイドに表示されているコマンドは、Redisバージョン6.0.16を実行しているUbuntu 22.04サーバーでテストされました。同様の環境をセットアップするためには、Ubuntu 22.04にRedisをインストールしてセキュリティ設定する方法のガイドのステップ1に従ってください。これらのコマンドの動作を示すために、Redisのコマンドラインインターフェースであるredis-cliで実行します。異なるRedisインターフェース(例:Redliなど)を使用している場合、特定のコマンドの出力は異なる場合があります。
代わりに、これらのコマンドをテストするために管理されたRedisデータベースインスタンスを用意することもできますが、データベースプロバイダーによって許可される制御レベルに依存して、このガイドの一部のコマンドは説明どおりに機能しないかもしれません。Silicon CloudのManaged Databases製品ドキュメントに従ってSilicon Cloudの管理されたデータベースを用意してください。その後、Redliをインストールするか、TLSトンネルを設定してTLS経由でManaged Databaseに接続する必要があります。
メモリ関連の問題のトラブルシューティング
メモリ使用量は、現在使用されているメモリの量を単一のキーごとに示します。引数としてキーの名前を指定し、使用バイト数を出力します。まず、例として変数を設定してください。
- set key_meaningOfLife “Food”
次に、メモリ使用状況を確認してメモリをチェックします。
- memory usage key_meaningOfLife
(integer) 88
Redis サーバーがメモリをどのように使用しているかをより一般的に理解するために、メモリ統計コマンドを実行することができます。
- memory stats
このコマンドは、メモリに関連するメトリクスとその値の配列を出力します。メモリ統計によって報告されるメトリクスは以下の通りです。
- peak.allocated: The peak number of bytes consumed by Redis
- total.allocated: The total number of bytes allocated by Redis
- startup.allocated: The initial number of bytes consumed by Redis at startup
- replication.backlog: The size of the replication backlog, in bytes
- clients.slaves: The total size of all replica overheads, meaning the output and query buffers and connection contexts
- clients.normal: The total size of all client overheads
- aof.buffer: The total size of the current and rewrite append-only file buffers
- db.0: The overheads of the main and expiry dictionaries for each database in use on the server, reported in bytes
- overhead.total: The sum of all overheads used to manage Redis’s keyspace
- keys.count: The total number of keys stored in all the databases on the server
- keys.bytes-per-key: The ratio of the server’s net memory usage and keys.count
- dataset.bytes: The size of the dataset, in bytes
- dataset.percentage: The percentage of Redis’s net memory usage taken by dataset.bytes
- peak.percentage: The percentage of peak.allocated taken out of total.allocated
- fragmentation: The ratio of the amount of memory currently in use divided by the physical memory Redis is actually using
memory malloc-statsは、RedisでLinuxシステムで使用されているjemallocというメモリ割り当てプログラムから内部統計レポートを提供します。
- memory malloc-stats
もしメモリ関連の問題に直面しているようで、前のコマンドの出力を解析しても役に立たない場合は、メモリ診断を実行してみることができます。
- memory doctor
この機能は、見つけられるメモリ消費の問題を出力し、潜在的な解決策を提案します。
Redisインスタンスに関する一般的な情報を取得する方法について教えてください。
メモリ管理と直接関係のないデバッグコマンドの1つに「モニター」があります。このコマンドは、Redisサーバーが処理するすべてのコマンドの連続ストリームを確認することができます。
- monitor
OK 1566157213.896437 [0 127.0.0.1:47740] “auth” “foobared” 1566157215.870306 [0 127.0.0.1:47740] “set” “key_1” “878”
デバッグに役立つ別のコマンドは「情報(インフォ)」です。このコマンドは、サーバーに関する複数の情報と統計情報を返します。
- info
# Server redis_version:6.0.16 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:a3fdef44459b3ad6 redis_mode:standalone os:Linux 5.15.0-41-generic x86_64 . . .
このコマンドは多くの情報を返します。もし一つの情報ブロックのみを返すことを希望する場合は、infoの引数としてそれを指定することができます。
- info CPU
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04
infoコマンドが返す情報は、使用しているRedisのバージョンによって異なることに注意してください。
キーを使用してください。
キーコマンドは、キーの名前を忘れてしまった場合や、名前を作成したけれども誤ってスペルミスをしてしまった場合に役立ちます。キーコマンドは、パターンに一致するキーを検索します。
- keys pattern
次のグロブスタイルの変数がサポートされています。
- ? is a wildcard standing for any single character, so s?mmy matches sammy, sommy, and sqmmy
- * is a wildcard that stands for any number of characters, including no characters at all, so sa*y matches sammy, say, sammmmmmy, and salmony
- You can specify two or more characters that the pattern can include by wrapping them in brackets, so s[ai]mmy will match sammy and simmy, but not summy
- To set a wildcard that disregards one or more letters, wrap them in brackets and precede them with a carrot (^), so s[^oi]mmy will match sammy and sxmmy, but not sommy or simmy
- To set a wildcard that includes a range of letters, separate the beginning and end of the range with a hyphen and wrap it in brackets, so s[a-o]mmy will match sammy, skmmy, and sommy, but not srmmy
Warning
結論
このガイドでは、Redisを使用する際に遭遇する可能性のある問題のトラブルシューティングと解決に役立ついくつかのコマンドについて説明しています。もし関連する他のコマンド、引数、または手順についてこのガイドで学びたいことがある場合は、コメントで質問したり、提案をしてください。
Redisのコマンドに関する詳細情報については、Redisデータベースの管理方法についてのチュートリアルシリーズをご覧ください。