Redisの問題をトラブルシューティングする方法

はじめに

Redisは、オープンソースのインメモリキーバリューデータストアです。トラブルシューティングやデバッグに役立ついくつかのコマンドが付属しています。Redisはインメモリキーバリューストアとしての性質を持つため、これらのコマンドの多くはメモリ管理に焦点を当てていますが、Redisサーバーの状態を概観するために役立つ他のコマンドもあります。このチュートリアルでは、Redisの使用中に発生する可能性のある問題の診断と解決に役立ついくつかのコマンドの使用方法について詳しく説明します。

このガイドの使用方法

このガイドは、自己完結型の例を含んだチートシートとして記述されています。完了するタスクに関連するセクションに直接移動することをお勧めします。

このガイドで示されているコマンドは、Redisバージョン6.0.16を実行しているUbuntu 22.04サーバーでテストされました。同様の環境をセットアップするには、Ubuntu 22.04でRedisをインストールしてセキュアにする方法ステップ1に従うことができます。これらのコマンドの動作を確認するために、Redisコマンドラインインターフェースであるredis-cliで実行しています。異なるRedisインターフェース(例: Redli)を使用している場合、特定のコマンドの出力は異なる場合があります。

代わりに、これらのコマンドをテストするために管理されたRedisデータベースインスタンスをプロビジョニングすることもできますが、データベースプロバイダが許可する制御レベルによっては、このガイドの一部のコマンドは説明通りに動作しない可能性があります。DigitalOceanの管理されたデータベースをプロビジョニングするには、Managed Databases製品のドキュメントに従ってください。次に、Redliをインストールするか、TLSトンネルを設定してTLS経由で管理されたデータベースに接続する必要があります。

memory usageは、現在のメモリ使用量を単一のキーごとに表示します。キーの名前を引数として受け取り、使用されているバイト数を出力します。まず、例として変数を設定します:

  1. set key_meaningOfLife "Food"

次に、memory usageでメモリを確認します:

  1. memory usage key_meaningOfLife
Output
(integer) 88

Redisサーバーがどのようにメモリを使用しているかをより一般的に理解するために、memory statsコマンドを実行できます:

  1. memory stats

このコマンドは、メモリに関連するメトリクスとその値の配列を出力します。以下は、memory statsで報告されるメトリクスの一部です:

  • peak.allocated: Redisによって消費される最大バイト数
  • total.allocated: Redisによって割り当てられた総バイト数
  • startup.allocated: Redisの起動時に消費される初期バイト数
  • replication.backlog: レプリケーションバックログのサイズ(バイト単位)
  • clients.slaves: 全レプリカのオーバーヘッドの合計サイズ(出力バッファ、クエリバッファ、接続コンテキストを含む)
  • clients.normal: 全クライアントのオーバーヘッドの合計サイズ
  • aof.buffer: 現在のおよび書き込み用追記専用ファイルバッファの合計サイズ
  • db.0: サーバー上で使用されている各データベースのメインおよび有効期限辞書のオーバーヘッド(バイト単位)
  • overhead.total: Redisのキースペースを管理するために使用されるすべてのオーバーヘッドの合計
  • keys.count: サーバー上のすべてのデータベースに格納されているキーの合計数
  • keys.bytes-per-key: サーバーのネットメモリ使用量とkeys.countの比率
  • dataset.bytes: データセットのサイズ(バイト単位)
  • dataset.percentage: Redisのネットメモリ使用量のうちdataset.bytesが占める割合
  • peak.percentage: peak.allocatedtotal.allocatedから占める割合
  • フラグメンテーション:Redisが実際に使用している物理メモリに対する現在使用中のメモリ量の比率

memory malloc-statsは、Linuxシステム上のRedisで使用されるメモリアロケータであるjemallocからの内部統計レポートを提供します。

  1. memory malloc-stats

前のコマンドの出力を解析しても役に立たない場合、memory doctorを実行してみることもできます。

  1. memory doctor

この機能は、見つかったメモリ消費の問題を出力し、潜在的な解決策を提案します。

Redisインスタンスに関する一般情報の取得

A debugging command that isn’t directly related to memory management is monitor. This command allows you to review a constant stream of every command processed by the Redis server:

  1. monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

デバッグに便利な別のコマンドは、infoです。このコマンドは、サーバーに関する複数の情報と統計情報を返します。

  1. info
Output
# 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 . . .

このコマンドは多くの情報を返します。1つの情報ブロックのみを返す場合は、infoの引数として指定することができます。

  1. info CPU
Output
# 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コマンドの使用

keysコマンドは、キーの名前を忘れてしまった場合や、誤ってスペルミスをしたキーを作成してしまった場合に役立ちます。keysは、パターンに一致するキーを検索します。

  1. keys pattern

以下のグロブスタイルの変数がサポートされています:

  • ?は、任意の1文字を表すワイルドカードです。つまり、s?mmysammysommysqmmyに一致します。
  • *は、任意の文字(0文字も含む)を表すワイルドカードです。つまり、sa*ysammysaysammmmmmysalmonyに一致します。
  • パターンに含めることができる2文字以上の文字を、角括弧で囲んで指定することができます。したがって、s[ai]mmysammysimmyに一致しますが、summyには一致しません。
  • 1文字以上の文字を無視するワイルドカードを設定するには、角括弧で囲んでその前にキャレット(^)を付けます。したがって、s[^oi]mmysammysxmmyに一致しますが、sommysimmyには一致しません。
  • 文字の範囲を含むワイルドカードを設定するには、ハイフンで範囲の始まりと終わりを区切り、角括弧で囲みます。したがって、s[a-o]mmysammyskmmysommyに一致しますが、srmmyには一致しません。

注意: Redisのドキュメントによると、keysはパフォーマンスに大きな影響を与える可能性があるため、ほとんどの場合、本番環境では使用しないでください。

結論

このガイドでは、Redisを使用して作業する際に遭遇する問題をトラブルシューティングし解決するためのいくつかのコマンドについて詳しく説明しています。このガイドで学びたい他の関連するコマンド、引数、手順がある場合は、コメントで質問したり提案したりしてください。

Redisのコマンドに関する詳細な情報については、Redisデータベースの管理方法に関するチュートリアルシリーズをご覧ください。

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis