2017-02-10 1 views
0

Nous utilisons redis (Elasticache) comme cache store.We connaissent des plantages dans notre application en raison de délai de connexion redis.We ont trois serveurs d'applications et utilisent phusion passager. Au moment des accidents, il y a environ 200 connexions actives.Redis :: TimeoutError: Connexion expirée Erreur -Rails cache

/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:55:in `rescue in _read_from_socket' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:48:in `_read_from_socket' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:41:in `gets' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:273:in `read' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:248:in `block in read' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:236:in `io' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:247:in `read' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:112:in `block in call' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:217:in `block (2 levels) in process' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:353:in `ensure_connected' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:207:in `block in process' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:292:in `logging' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:206:in `process' 
/home/chillr/deploy/chillr-api/shared/vendor/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:112:in `call' 

slowlog commandes

1) 1) (integer) 6867375 
2) (integer) 1486701507 
3) (integer) 62008 
4) 1) "eval" 
    2) "for i, name in ipairs(redis.call('KEYS', 'cache:user_transaction_logs:*:9008245678')) do redis.call('DEL', name); end" 
    3) "0" 
2) 1) (integer) 6867374 
    2) (integer) 1486701507 
    3) (integer) 61989 
    4) 1) "KEYS" 
     2) "cache:user_transaction_logs:*:9008245678" 
3) 1) (integer) 6867373 
    2) (integer) 1486701507 
    3) (integer) 61026 
    4) 1) "eval" 
     2) "for i, name in ipairs(redis.call('KEYS', 'cache:user_transaction_logs:*:8888662136')) do redis.call('DEL', name); end" 
     3) "0" 
4) 1) (integer) 6867372 
    2) (integer) 1486701507 
    3) (integer) 61006 
    4) 1) "KEYS" 
     2) "cache:user_transaction_logs:*:8888662136" 
5) 1) (integer) 6867371 
    2) (integer) 1486701507 
    3) (integer) 63070 
    4) 1) "eval" 

Nous utilisons

  • cache ElastiCache.
  • t2.medium Phusion passager

Pas de connexions au moment de la collision 175..200

GEM Redis (3.2.1) redis-rails (5.0.1)

Ce qui peut être fait

+0

Ne pas utiliser les clés dans la production: https://redis.io/commands/keys –

+0

Mais nous ne pouvons pas l'éviter dans ce case.We voulez chercher – tes

+0

Vous pouvez essayer de numériser ou de modifier la structure de vos données afin de pouvoir rechercher directement les transactions des utilisateurs, par exemple en utilisant un ensemble qui lie les ID utilisateur aux identifiants de transaction –

Répondre

0

Surveillez l'utilisation actuelle des ressources pour votre serveur redis. Augmentez temporairement la connexion Redis de votre connexion.

Essayez cette liste de contrôle d'abord

https://redis.io/topics/latency

+0

Nous avons amélioré notre Serveur elasticache.Attendant aussi voir – tes

+0

ok cool, laissez-nous savoir les résultats –