ehCache 3.0默认堆条目大小(与hibernate二级缓存一起使用)



我使用ehcache 3.0实现启用了hibernate二级缓存。我遇到了一个问题,大约10k个条目的缓存命中率相对较快,而大约30k个条目则非常缓慢。速度不是线性的,这让我怀疑条目是在堆外或磁盘上存储的。我还验证了这一点,将stacktraces和序列化程序视为瓶颈(据我所知,在堆上不应该使用序列化程序(。我没有添加ehcache.xml配置文件。我似乎在默认设置下运行。知道ehcache的默认堆大小是多少吗?

速度不是线性的,这让我怀疑条目是在堆外或磁盘上存储的。

您需要配置这样的行为。没有人可以在不了解您的配置或程序的情况下给出详细的建议。

根据您提供的信息,最有可能的原因:

通过增加缓存大小,程序需要更多的堆内存。如果使用的堆内存接近可用的堆内存,则程序会因为垃圾收集过多而减慢速度。垃圾收集器需要";呼吸空间";高效运行。

我处理任何性能问题的一般方法:

  • 了解所用Java实现的最大堆大小
  • 使用操作系统工具查看当前正在发生的事情,并了解程序在内存、CPU和I/O方面的资源使用情况。在Linux上,它将是vmstat
  • 使用类似visualvm的工具或打开GC日志来查看垃圾收集器活动
  • 有一个可重复的测试,可以用于性能评估

要找到理想的堆和条目大小,我建议:用5公里的参赛作品进行测试。Java应用程序占用了多少内存?系统中有多少可用内存?使用10k个条目运行测试。回答同样的问题。然后,您可以线性预测其他缓存大小的内存量。

最新更新