ehCache 3.0 默认堆上条目大小(与休眠二级缓存一起使用)
Posted
技术标签:
【中文标题】ehCache 3.0 默认堆上条目大小(与休眠二级缓存一起使用)【英文标题】:ehCache 3.0 default on-heap entries size (used with hibernate 2nd level cache) 【发布时间】:2020-11-02 19:07:09 【问题描述】:我通过 ehcache 3.0 实现启用了休眠二级缓存。我遇到了一个问题,缓存命中在大约 10k 条目上相对较快,而在大约 30k 条目上非常慢。缓慢不是线性的,这让我怀疑这些条目是存储在堆外或磁盘上的。我还通过获取堆栈跟踪并将序列化程序视为瓶颈来验证这一点(据我所知,堆上不应使用序列化程序)。我没有添加 ehcache.xml 配置文件。我似乎在默认设置下运行。知道 ehcache 的默认堆大小是多少吗?
【问题讨论】:
【参考方案1】:缓慢不是线性的,这让我怀疑这些条目是存储在堆外或磁盘上的。
您需要配置此类行为。在不了解您的配置或程序的情况下,任何人都无法给出详细的建议。
根据您提供的信息,最可能的原因:
通过增加缓存大小,您的程序需要更多的堆内存。如果已用堆内存接近可用堆内存,您的程序会因为过多的垃圾回收而变慢。垃圾收集器需要“喘息空间”才能高效运行。
我对任何性能问题的一般方法:
了解您使用的 Java 实现的最大堆大小 使用您的操作系统工具查看当前正在发生的事情,并了解您的程序在内存、CPU 和 I/O 方面的资源使用情况。在 Linux 上是vmstat
使用诸如 visualvm 之类的工具或打开 GC 日志以查看垃圾收集器活动
拥有可用于性能评估的可重现测试
要找到理想的堆和条目大小,我建议: 使用 5k 个条目运行测试。您的 Java 应用程序占用了多少内存?系统中有多少可用内存? 使用 10k 个条目运行测试。回答同样的问题。然后,您可以使用其他缓存大小线性预测内存量。
【讨论】:
以上是关于ehCache 3.0 默认堆上条目大小(与休眠二级缓存一起使用)的主要内容,如果未能解决你的问题,请参考以下文章