Redis memory fragmentation ratio

ZabbixでRedisを監視できるようにしたが、さっそく障害を検出している。 深刻度は警告なので大きな影響はないはずだが、チューニングに関わりそうな内容なので調べて対応する。

Memory flagmentation ratio is too highトリガーでMemory fragmentation ratioアイテムの閾値超過を検出したため障害が生成されており、デフォルトの設定では閾値が1.5に設定されている。 テンプレートの説明(Redis monitoring and integration with Zabbix)を確認したところ、閾値を超えたらRedisを再起動してfragmentationの解決を推奨しており、1.0未満の場合もメモリ不足の可能性があるとしてチューニングの検討を推奨している。 注釈にあまりあてにならない場合もあると記載があるが...いったん気にしない。

他にも検索して見つかったメモリ管理のベスト プラクティス | Memorystore for Redisによると、activedefragという設定があり、有効にすることでfragmentationを軽減できるとのこと。

ということで、いったんactivedefragを有効にして解決するか試す。 ついでにmaxmemoryがデフォルト(64MB)のままだったので1GBまで増やす。 設定ファイルを編集する前に、redis-cli config set activedefrag yesで問題なく有効にできるか確認するが、エラーが表示され失敗してしまった。

(error) ERR CONFIG SET failed (possibly related to argument 'activedefrag') - Active defragmentation cannot be enabled: it requires a Redis server compiled with a modified Jemalloc like the one shipped by default with the Redis source distribution

Redisコンパイル時にJemallocを適切に組み込む必要がある?ようだが、USEフラグ的にはJemallocを指定してあり、念の為emerge -1e dev-db/redisで再構築・再起動して再チャレンジするも、同じエラーとなってしまった。

Redisを再起動したのでMemory fragmentation ratioアイテムの値が1.0〜1.5に収まったか確認したが、起動後に値が激増したあと、時間経過により再起動前と同程度の値で落ち着いてしまった。

他に対処が見つからず、Redis的にもOS的にもメモリ周りで問題が生じている形跡もないので、最終的には閾値の緩和で様子見することにした。 activedefragは有効にしたいので、バージョンアップがきたら再度試したい。

最後に、1.0未満だとRedisに割り当てたメモリが不足している可能性があるため最適化かRAMの追加を検討してね、と説明に記載があるのにトリガーがないので、Memory flagmentation ratio is too highを複製しMemory fragmentation ratioが1.0未満の時に障害検出するトリガーを追加した。

links

social