2014-12-22 2 views
2

У меня есть приложение grails, которое использует memcached для хранения результатов запросов все время.Тайм-аут в приложении grails с memcached (ElastiCache) при большой нагрузке и больших кеш-файлах

По запросу, где результат, хранящийся в кеше, невелик (100kb), работает нормально с запросами 50K, но в одном случае, когда результат aproximally 800kb, приложение выдает исключение, когда имеет более 1K запросов минут.

Я пытался исправить это в течение последних двух дней, но все ответы являются неконкурентоспособными. Я начинаю думать, что проблема может быть на ElastiCache.

Для реализации я использую клиентский кластер AWS ElastiCache, который является вилкой spymemcached.

Я попытался исправить изменение клиента по умолчанию spymemcached и xmemcached, но ошибка такая же.

Исключением является: java.util.concurrent.ExecutionException: net.spy.memcached.internal.CheckedOperationTimeoutException: время работы завершено.

Моя реализация услуг:

import net.spy.memcached.* 
import grails.converters.JSON 
import org.springframework.beans.factory.InitializingBean 

class MemCacheService implements InitializingBean { 

    String ELASTIC_CACHE_CLUSTER_IP = "teste.ptsfty.cfg.use1.cache.amazonaws.com"; 
    def ELASTIC_CACHE_CLUSTER_PORT = 11211 
    def MemcachedClient client 
    def expireTime = 21600 

    def void afterPropertiesSet() { 
     client = new MemcachedClient(new InetSocketAddress(ELASTIC_CACHE_CLUSTER_IP, ELASTIC_CACHE_CLUSTER_PORT)); 
    } 

    def getDataOnCache(key) { 
     try { 
      def result = client.get(key) 
      if (result) return JSON.parse(result) 
      else return null 
     } catch(Exception e) { 
      println e.getMessage() 
      return null 
     } 
    } 

    def saveOnCache(key, value) { 
     try { 
      def result = client.add(key, expireTime, value); 
      return result 
     } catch(Exception e) { 
      println e.getMessage() 
      return null 
     } 

    } 

    def removeOnCache(key) { 
     def result = client.delete(key); 
     return result 
    } 


} 

ответ

1

если Elasticache перестает работать как количество соединений увеличивается, попробуйте увеличить параметр memcached_connections_overhead. У вашего экземпляра Elasticache может быть нехватка памяти для обработки входящих подключений. Каждый экземпляр использует небольшой объем памяти для обработки каждого соединения, и этот параметр обычно имеет низкое значение по умолчанию.

+0

Hi Carlos. Спасибо за помощь. Я меняю конфигурацию на ElastiCache, но ошибка не останавливается. –

+0

Есть ли признаки этой проблемы для поиска в журналах? –

 Смежные вопросы

  • Нет связанных вопросов^_^