【问题标题】:How to tune a cache in an application server如何调整应用程序服务器中的缓存
【发布时间】:2009-01-17 19:20:38
【问题描述】:

我们的客户在每台应用服务器上都有数百个项目。

每个项目都有自己的元数据描述符(内存约 1MB,从数据库加载约 1 秒)。 元数据用于在各个方面(权限、有效字段、字段值等)验证对服务器的每个请求。我们严重依赖此元数据。

为了节省查询数据库的时间,我们决定实现缓存机制(使用 EHCache)来存储项目的元数据。我们想适当地调整缓存。

我想知道,调整缓存属性(总大小、对象数量、疏散策略......)的技术是什么

例如,是否应该释放一段时间未访问的对象以节省内存?如何选择驱逐策略(例如 LRU、MRU)?

我们确实拥有一支经验丰富的负载测试团队和大量来自客户的数据(项目数量、平均元数据大小等),因此构建负载测试环境应该不成问题。我只是不确定我到底应该寻找什么?

请分享您的缓存调整经验。

谢谢

【问题讨论】:

    标签: performance language-agnostic caching


    【解决方案1】:

    缓存的关键统计数据非常简单...缓存未命中率。你想计算某人向缓存请求某物的次数,以及“某物”不在缓存中的次数,后者除以前者就是你的未命中率。

    差不多就是这样。为您的应用程序找到一种可靠的方法来衡量它,而其他一切都只是运行测试。每次调整时,在实际情况下进行负载测试以检查未命中率的变化。可用参数过于依赖问题的具体情况。

    我通常会从 LRU 开始,增加大小,直到我开始看到未命中率的回报递减,然后尝试相同大小的 LFU,看看它的比较情况。当然,除非你碰巧确定你的病例对 LRU 来说是病态的。

    【讨论】:

      【解决方案2】:

      最佳驱逐策略可能在很大程度上取决于具体数据及其使用方式。

      这里有几个通用的例子:

      新闻内容 - 每天都会添加文章,并且很少修改 - 缓存用于减少对数据库服务器的需求。驱逐策略应该针对多次读取但几乎没有写入进行定制。

      论坛主题(可能不是最好的例子)- 驱逐策略应该针对多次读取进行调整,也应该针对频繁写入进行调整。

      虽然新闻内容可能使用最近最少使用 (LRU) 逐出策略进行最佳配置,但此示例中的论坛主题可能会使用最近最少使用 (LFU) 逐出策略进行更优化配置。当添加新消息时,无论如何都需要经常更换论坛线程的缓存,但是,LFU 策略会将最活跃的线程保留在缓存中。

      【讨论】:

        猜你喜欢
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 2010-09-16
        • 2020-08-24
        相关资源
        最近更新 更多