У меня есть приложение 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
}
}
Hi Carlos. Спасибо за помощь. Я меняю конфигурацию на ElastiCache, но ошибка не останавливается. –
Есть ли признаки этой проблемы для поиска в журналах? –