8888


Sidekiqを動かすためにAWSのElasticacheを使用しています。  
Redisのバージョンは2.8.6です。

**Redisの「(error) ERR max number of clients reached」というエラー対応に困っています。  
コマンドライン操作で「FLUSHALL」を実行して、データを一旦クリアすることで対応しましたが、待機状態のジョブもリセットしてしまう結果となったので、ジョブのリセットを防ぐ良い解決策を知っている方がいればお教えください。**

よろしくお願いします。詳細は下記にまとめました。

Redisのmaxclientsというパラメーターが上限値（65000）に達してしまった際に発生するエラーで、Sidekiqのダッシュボード画面の下部の「接続」という項目（※下図の赤枠箇所）が64999となり、Sidekiqの動作も止まってしまう。

![Sidekiqのダッシュボード画面](https://i.stack.imgur.com/E70W9.png)

Elasticacheのマニュアル（<http://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/CacheParameterGroups.Redis.html>）  
によると、maxclientsの上限値は変更できないとのこと。

エラーへの対応として、Elasticacheをリブートして、コマンドライン操作で「FLUSHALL」を実行して、データを一旦クリアすることで対応。  
（※Redisのコマンドライン操作で何を打ち込んでも、「(error) ERR max number of clients
reached」のエラーが返ってきてしまい、「FLUSHALL」すらできなかったので、Elasticacheの再起動が必要だった。）  
しかし、待機状態のジョブもリセットしてしまう結果となった。


CC BY-SA 3.0
2015-04-02T06:21:43.583
8684
2015-04-08T01:36:12.100
2015-04-02T08:25:04.057
8000
8558
question
ruby-on-rails aws redis sidekiq
AWSのElasticache（Redis）のパラメーターmaxclientsの値が上限に達したときの対応方法


> maxclientsの値は蓄積されるようなのですが

そんなはずはないだろうと調べてみると、AutoScalingでインスタンスが減るときに切断処理が行えないため、タイムアウトするまでつなぎっぱなしになってしまうようです。

[redisをAutoScaling環境で使う場合はtimeoutの設定に注意 -
まめ畑](http://d.conma.me/entry/2013/03/21/114044)

terminateする時に何かしらフックを仕掛けられないだろうかと思うのですが、ちょっとわからないです。


CC BY-SA 3.0
2015-04-02T10:52:55.837
8691
2015-04-02T10:52:55.837
8000
8684
answer


Elasticacheのパラメーターであるtimeoutの値がデフォルトだと0だったため、0より上の値に設定してあげたところ（とりあえず3600に設定）、接続（maxclients）の値も解放され、解決することができました。

timeoutの値が0だとアイドル状態のクライアントとの切断処理を行わないため、蓄積されていました。AutoScalingしたインスタンスからElasticache（Redis）に接続するときは注意が必要です。

デフォルトのパラメーターグループの値は編集できないので、新しくパラメーターグループを作成し、適用しました。


CC BY-SA 3.0
2015-04-08T01:36:12.100
8888
2015-04-08T01:36:12.100
8558
8684
answer