ElastiCache Redis のメトリクス FreeableMemory を見ると料金ページのスペックより多くのメモリが使えそうな理由を教えてください
困っていた内容
現在 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 のメトリクスである BytesUsedForCache
や DatabaseMemoryUsagePercentage
を対象としてください。
実際に使用可能なメモリ量を確認してみた
以下の手順で確認しました。
- cache.t3.small キャッシュノードタイプ(料金ページではメモリ 1.37 GiB)で ElastiCache Redis を 1 台起動(EC2 インスタンスからアクセス可能なネットワーク設定にする)
- VPC 上の EC2 インスタンスから redis-cli でアクセス
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 よりは少ないですが、ほぼ近いメモリ量となりました。
1.0275 / 0.75 = 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に記載されています。
モニタリングすべきメトリクスをある程度知っておけば、トラブルシューティングが捗ります。