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未満の時に障害検出するトリガーを追加した。