当前位置: 首页 > 知识库问答 >
问题:

带memcached(ElastiCache)的grails应用程序在重载和大缓存文件上超时

楚浩然
2023-03-14

我有一个grails应用程序,它一直使用memcached存储请求结果。

对于存储在缓存中的结果很小(100KB)的请求,可以处理50K个请求,但在一种情况下,结果接近800KB,当每分钟有超过1K个请求时,应用程序会抛出异常。

过去两天我试图解决这个问题,但所有的答案都没有定论。我开始认为问题可能出在弹性疼痛上。

对于实现,我使用AWS ElastiCache集群客户端,即SpymemCached的分叉。

我试图修复将客户端更改为默认的spymemcached和xmemcached,但错误是相同的。

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个答案

万俟小林
2023-03-14

如果随着连接数的增加,Elasticache停止工作,请尝试增加memcached_connections_overeader参数。您的Elasticache实例可能内存不足,无法处理传入的连接。每个实例使用少量的内存来处理每个连接,并且这个参数通常具有较低的默认值。

 类似资料:
  • 问题内容: 第一部分 在Grails应用程序中,我了解到您可以通过添加以下方式为每个域类启用二级缓存 默认情况下,仅在调用时使用二级缓存,但也可以通过添加到查询将其用于条件查询和动态查找器。 但是,我仍然不确定我是否了解查询缓存的工作原理。我最好的猜测是: 每个域类都有单独的查询缓存,例如一个用于Book,另一个用于Author 在执行类似的查询之前,将根据域类(Author),查询(findBy

  • 我在mongoDB 2.6.5和grails 2.4.4中遇到了一个无法解决的问题。为了隔离问题,我创建了一个简单的2.4.4 grails应用程序,安装了grails mongob插件(编译": mongob: 3.0.2"),注释掉Hibernate依赖项,添加了我的mongob数据源,并设置了一个简单的域类(com.nerds.Nerd)。当我生成-all然后启动应用程序并导航到NerdCo

  • 我的情况是,我有Grails 2.1.2应用程序,并希望引入使用缓存插件和cache-ehcache插件作为实现的方法级缓存。 我的缓存配置为在内存中,如下所示: 我有一个像这样的方法,它只接受int参数,所以密钥生成不是问题: 我的问题是,当调用这个方法时,我得到了一个< code > Java . lang . out of memory error:Java heap space 异常。原因

  • 我在做什么,发生了什么? 我正在尝试上载grails中的文件,并将其删除。完成后,我仍然面临一个问题,即文件大小太大。例外情况如下: 我尝试和结果: 我发现这个问题之前问过,答案是放一些配置变量: 但仍然会出现同样的错误。我还尝试添加一些依赖项,如这里所述。或者关闭IDE并重建。什么都解决不了。 有人面对这个问题并能解决它吗?

  • 我正在开发一个应用程序,在第一次运行时,必须通过应用编程接口从网络下载文件(图像jpg/png),然后将其存储在本地,这样在线连接就不再必要了(用户可以在线运行更新,如果有的话,可以通过应用编程接口下载更新的数据将是任何可用的更新)。 我知道桌面应用程序的工作方式非常不常见,但主要目标是将桌面应用程序数据与网络应用程序同步。 到目前为止,我已经找到了一个npm插件(link),用于检查用户是否连接