繁体   English   中英

如何调整应用程序服务器中的缓存

[英]How to tune a cache in an application server

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

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

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

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

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

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

请分享您的缓存调优体验。

谢谢

关于缓存的关键属性非常简单......缓存未命中率。 您想要计算某人向缓存中提取某些内容的次数,以及“某些内容”尚未存在于缓存中的次数,后者除以前者的次数就是您的未命中率。

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

我通常会从LRU开始,增加大小,直到我开始看到未命中率的收益递减,然后尝试相同大小的LFU以查看它的比较。 当然,除非你碰巧知道你的病例是LRU病态的。

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

以下是一些通用示例:

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

论坛主题(可能不是最好的例子) - 驱逐策略应围绕许多读取而定制,但也应围绕频繁写入。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM