【入門編】 メモリ使用量の監視指標 – Redis

こんにちは!Redisの仕組みや運用について、もっと深く知りたいと思っているんですね。素晴らしい着眼点です。

インフラの世界では、データベースの「メモリ管理」というのは、いわば職人技が試される領域です。ここをクリアすれば、あなたもRedisの基本はバッチリマスターできますよ。今日は、初心者の方でもスッと腑に落ちるように、日常の例えを交えながら、Redisのメモリ監視の核心に迫っていきましょう。

—

Redisのメモリは「ダンボール箱」に似ている

まず、Redisがメモリをどう扱っているかを知るために、部屋の中にある「ダンボール箱」を想像してください。

あなたは日々、たくさんの荷物(データ)をダンボール箱に詰め込んでいきます。

  • 実際に荷物が占めている体積
  • ダンボール箱そのものが占めている場所(容積)

この2つ、実は一致しませんよね。
例えば、中身の荷物は小さくても、大きめのダンボール箱を使っていれば、部屋の中では「ダンボール箱のサイズ」分のスペースが取られてしまいます。さらに、荷物を出し入れしているうちに、箱のあちこちがボコボコにへこんだり、中途半端な隙間が生まれてしまったりします。

Redisの世界でも、これとまったく同じことが起きています。この仕組みを理解するためのキーワードが、今回扱う`used_memory_rss`と`used_memory_peak`です。

—

押さえておべき3つの重要メトリクス

Redisの状態を確認するコマンド `INFO memory` を叩くと、たくさんの数字が出てきますが、まずは次の3つだけに集中してください。

1. `used_memory`(荷物の実体積)

  • Redisが「データそのものを保存するために使っている純粋なメモリの量」です。

2. `used_memory_rss`(ダンボール箱が占める実際のスペース)

  • OS(オペレーティングシステム)の視点から見て、Redisが実際にガッツリ確保してしまっている物理メモリの量です。「Resident Set Size」の略ですが、ここでは「ダンボール箱の占有スペース」と覚えてください。

3. `used_memory_peak`(過去最高のスペース消費記録)

  • 運用している中で、「今までで一番ダンボール箱が広がってしまった瞬間」の記録です。

—

「断片化率」はどうやって計算し、何を見るべきか?

さて、ここからが本題です。
Redisの健康状態を測る上で最も重要な指標の一つが「メモリ断片化率(Mem Fragmentation Ratio)」です。

計算式は非常にシンプルです。

$$\text{断片化率} = \frac{\text{used\_memory\_rss(ダンボール箱のスペース)}}{\text{used\_memory(荷物の実体積)}}$$

この数字が何を意味するのか、日常に置き換えて考えてみましょう。

  • 比率が「1.0」に近い(または少し高い)場合
  • 荷物のサイズとダンボール箱のサイズがピッタリ合っています。非常にキレイに片付いている状態です。
  • 比率が「1.5」や「2.0」を超えてきた場合
  • 荷物は少ないのに、やたらと大きなダンボール箱が部屋を圧迫している状態です。「本当はもっとメモリを節約できるのに、OSとの間で無駄な陣取り合戦が起きている」サインになります。

実際の `INFO memory` の出力例を見てみ頃

RedisのCLIから `INFO memory` を実行すると、次のようなデータが返ってきます(一部抜粋・解説付き)。

Memory
used_memory:104857600 # 1. 荷物の実体積:約100MB
used_memory_rss:2147483648 # 2. 実際のスペース:約2GB(!?)
used_memory_peak:150994944 # 3. 過去最高記録:約144MB
mem_fragmentation_ratio:20.48 # 4. 断片化率:約20.4倍!

おっと、この出力例は少し極端ですが……`used_memory` が100MBなのに、OS側では2GBもメモリが確保されている(断片化率が20を超えている)という危険な状態です。

「あれ? そんなにデータ入れてないのに、サーバーのメモリがパンクしそう!」という現場の悲鳴は、大体この断片化が原因で引き起こされます。

—

現場で戦うエンジニアからのアドバイス

もし、監視していて「おや、断片化率が1.5を超えてきたな」「`used_memory_peak` に比べて、今のメモリ効率が悪すぎるな」と感じたらどうすればいいでしょうか?

初心者の方は、「Redisを再起動しなきゃいけないの?」と焦りがちですが、Redisには優秀な機能があります。

近年のRedis(バージョン4.0以降)では、「メモリーの自動デフラグ(Active Defragmentation)」という機能が備わっています。散らばった荷物を夜のうちにこっそり整理整頓し、ダンボール箱のサイズをコンパクトに畳み直してくれる機能です。

これを有効にしておくことで、サービスを止めることなく、安全にメモリ効率を最適化することができます。

—

まとめ

  • `used_memory` は「データそのもののサイズ」。
  • `used_memory_rss` は「OSから見た実際のメモリ占有サイズ」。
  • この2つの比率(断片化率)を監視することで、「無駄なメモリが使われていないか」を察知できる。

メモリ管理は、データベース運用における「部屋の片付け」のようなものです。仕組みさえ分かってしまえば、もう怖いものはありません。
日々の監視の中にこの視点を取り入れて、強靭で美しいRedis環境を作っていきましょう。

ここをクリアしたあなたなら、もうRedisのメモリ管理で迷うことはありませんよ!次のステップも一緒に頑張りましょう。

コメント

タイトルとURLをコピーしました