2014-12-22 5 views
2

memcached를 사용하여 요청 결과를 항상 저장하는 grails 응용 프로그램이 있습니다.큰로드 및 큰 캐시 파일에서 memcached (ElastiCache)를 사용하여 grails 응용 프로그램의 시간 초과

요청시 캐시에 저장되는 결과가 작은 경우 (100kb) 50K 요청에는 문제가 없지만 결과가 약 800kb 인 경우 1K 분이 넘는 요청이있을 때 응용 프로그램에서 예외가 발생합니다.

지난 2 일이 문제를 해결하기 위해 노력했지만 모든 대답은 결론적이지 않습니다. 문제가 ElastiCache에있을 수 있다고 생각하기 시작합니다.

구현을 위해 spymemcached 포크 인 AWS ElastiCache 클러스터 클라이언트를 사용합니다.

클라이언트를 기본 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

안녕하세요 Carlos. 도와 줘서 고마워. ElastiCache에서 구성을 변경했지만 오류가 멈추지 않습니다. –

+0

로그에서 찾을 때이 문제점의 징후가 있습니까? –