Redisでの「隠れた」メモリ消費の原因は次のとおりです。
-
マークは、スレーブに供給するためにマスターによって維持されるバッファーについてすでに言及しました。スレーブがマスターより遅れている場合(たとえば、低速のボックスで実行されているため)、マスターでメモリが消費されます。
-
長時間実行されているコマンドが検出されると、RedisはそれらをSLOWLOG領域に記録します。SLOWLOG領域はメモリを消費します。 SLOWLOG LENコマンドを使用して、ここにあるレコードの数を確認することをお勧めします。
-
通信バッファもメモリを使用できます。私が覚えている限り、Redisの古いバージョン(および2.4はかなり古い-本当にアップグレードする必要があります)では、制限がありませんでした。つまり、ある時点で大きなオブジェクトを転送すると、このクライアント接続に関連付けられた通信バッファーが大きくなります縮むことはありません。たまに大きなオブジェクトを扱うクライアントが多い場合は、それが原因である可能性があります。 Redisから非常に大きなデータを(ワンショットで)取得するコマンドを使用する場合、それも説明になる可能性があります。たとえば、数百万のキーを格納するRedisサーバーに適用される単純なKEYS *コマンドは、大量のメモリを消費します。
25MBものオブジェクトがあるとおっしゃいました。 404のクライアント接続があり、それぞれがある時点でそのようなオブジェクトにアクセスする必要がある場合、10GBのメモリを消費します。