ElastiCache Redis のメトリクス FreeableMemory を見ると料金ページのスペックより多くのメモリが使えそうな理由を教えてください

2021.07.03

困っていた内容

現在 ElastiCache Redis の t3.small キャッシュノードタイプを使用していますが、料金ページではメモリが 1.37 GiB なのに、CloudWatch コンソールで FreeableMemory のメトリクスを見ると 1.6 GB 以上あります。

1.6 GB を GiB(ギビバイト)に換算すると 1.49012 GiB であり、料金ページの 1.37 GiB よりも多くのメモリが使用できるように見えます。

ElastiCache Redis では料金ページに記載されたスペックよりも多くのメモリが使えるのでしょうか?

ElastiCache Redis で使用できるメモリ

料金ページに記載されたスペックよりも多くのメモリが使えるわけではありません。

FreeableMemoryホストレベルのメトリクスであり、実際に Redis が使用できるメモリではないため、上記のようなことが発生します。

ElastiCache Redis がどの程度のメモリを使用しているかモニタリングしたい場合は、Redis のメトリクスである BytesUsedForCacheDatabaseMemoryUsagePercentage を対象としてください。

実際に使用可能なメモリ量を確認してみた

以下の手順で確認しました。

  1. cache.t3.small キャッシュノードタイプ(料金ページではメモリ 1.37 GiB)で ElastiCache Redis を 1 台起動(EC2 インスタンスからアクセス可能なネットワーク設定にする)
  2. VPC 上の EC2 インスタンスから redis-cli でアクセス
  3. info memoryコマンドを実行
[ec2-user@ip-10-0-0-108 ~]$ redis-cli -h arakawa-blog-01.xxxx.0001.apne1.cache.amazonaws.com -p 6379
arakawa-blog-01.xxxx.0001.apne1.cache.amazonaws.com:6379> info memory
# Memory
...(省略)
maxmemory:1103269725
maxmemory_human:1.03G
maxmemory_policy:volatile-lru
...(省略)

パラメータグループdefault.redis6.x のパラメータreserved-memory-percentでは 25% のメモリがバックアップ・フェイルオーバー用に予約されているため、メモリ量は以下のように計算しました。

バイト → ギビバイトに換算
1103269725 B → 約 1.0275 GiB

予約されたメモリ 25 %を計算
1.0275 * 1.25 = 約 1.2844 GiB

料金ページの 1.37 GiB よりは少ないですが、ほぼ近いメモリ量となりました。

ちなみに、当初の内容の通りFreeableMemoryの値はおよそ 1.66 GB(約 1.5460 GiB) であり、1.37 GiB より大きな値でした。

運用観点のワンポイント - どのメトリクスを監視したらいいの?

ElastiCache Redis のドキュメントには、モニタリングすべきメトリクス - Amazon ElastiCache for Redisというページがあります。

こちらのページではざっくり Memory と記載されていますが、具体的なメトリクスはリンク先のMonitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch | AWS Database Blogに記載されています。

モニタリングすべきメトリクスをある程度知っておけば、トラブルシューティングが捗ります。

参考資料