5

我在我的应用程序中使用 ehcache 和兵马俑。当我将 ehcache 与兵马俑一起使用时,我的响应时间增加了 700 倍。我认为兵马俑正在花时间测量物体的大小,因为它给了我警告:

net.sf.ehcache.pool.sizeof.ObjectGraphWalker checkMaxDepth 警告:尝试计算对象图的大小时已达到配置的 1,000 个对象引用的限制。如果大小调整操作继续进行,可能会出现严重的性能下降。这可以通过将 CacheManger 或 Cache 元素 maxDepthExceededBehavior 设置为“abort”或使用 @IgnoreSizeOf 注释添加停止点来避免。如果在配置的限制下性能下降不是问题,请使用 CacheManager 或 Cache 元素 maxDepth 属性提高限制值。有关详细信息,请参阅 Ehcache 配置文档。

当我在课堂上使用 @IgnoreSizeOf 注释时,响应时间减少了很多。我的问题是使用 @IgnoreSizeOf 注释是否有任何缺点。对于它正在使用什么以及它如何减少我的应用程序的响应时间请帮助。提前致谢。

4

1 回答 1

7

此注释与 Terracotta 聚类无关。我猜你在这个主题上发布了另一个问题。

@IgnoreSizeOf 注释将具有 sizeOfEngine,它测量缓存中条目的内存占用,忽略缓存条目的注释类(或整个包)或子图(注释字段)的实例。

因此,如果您缓存的对象图具有“共享”子图,您将在该图以注释开头的字段进行注释。如果您忽略所有内容,则不会调整大小,并且 maxBytesLocalHeap 设置没有语义(您最终将遭受 OOME 的影响)。

您需要了解正在缓存的对象图才能正确使用注释。有关更多详细信息,请参阅http://ehcache.org/documentation/configuration/cache-size#built-in-sizing-computation-and-enforcement

现在,对于您所看到的性能问题,您可能希望在使用和不使用 maxBytesLocalHeap 设置以及使用和不使用集群的情况下进行测试,以试图找出您的问题。但我怀疑你的缓存可能比你预期的要多,导致大人物的足迹,以及对数据进行聚类的开销......

于 2012-11-12T22:00:02.263 回答