2013-10-29 4 views
7

Ich habe eine Rails-App mit Memcachier (Dalli als Client) auf Heroku bereitgestellt. Ich verwende das kostenlose Add-on (das einen 25 MB Cache bietet).Heroku Request Timeout, wenn Memcachier Cache-Limit erreicht

Wir haben von Heroku Anfragentimeouts erhalten und nach dem Debugging haben wir herausgefunden, dass das manuelle Löschen von Memcachier das Problem löste.

Timeouts treten auf, wenn Memcachier ein Limit nahe dem Limit erreicht, z. B. 20 MB (bei einem Limit von 25 MB).

Warum Memcachier Cache-Speicherplatz nicht mit der Zeit freigibt? Gibt es eine fehlende Konfiguration zu Memcachier zu Flush, wenn der Cache eine bestimmte Größe erreichen?

Meine conf:

application.rb

config.cache_store = :dalli_store 

production.rb

client = Dalli::Client.new 
config.action_dispatch.rack_cache = { 
    :metastore => client, 
    :entitystore => client, 
    :allow_reload => false 
} 

Antwort

0

Vielleicht versuchen Sie Ihr production.rb enthalten socket_timeout und socket_failure_delay Optionen zu aktualisieren.

require 'dalli' 
cache = Dalli::Client.new((ENV["MEMCACHIER_SERVERS"] || "").split(","), 
        {:username => ENV["MEMCACHIER_USERNAME"], 
        :password => ENV["MEMCACHIER_PASSWORD"], 
        :failover => true, 
        :socket_timeout => 1.5, 
        :socket_failure_delay => 0.2 
        }) 

- ODER -

Wenn Sie mit Puma, müssen Sie die connection_pool gem installiert haben.

Gemfile

gem 'connection_pool' 

Und diese Konfiguration in Ihrer production.rb

config.cache_store = :dalli_store, 
        (ENV["MEMCACHIER_SERVERS"] || "").split(","), 
        {:username => ENV["MEMCACHIER_USERNAME"], 
        :password => ENV["MEMCACHIER_PASSWORD"], 
        :failover => true, 
        :socket_timeout => 1.5, 
        :socket_failure_delay => 0.2, 
        :pool_size => 5 
        } 
Verwandte Themen