1

我正在尝试将兵马俑与 ehcache 一起使用。我的项目设置就像我正在使用 2 个 tomcat 实例,其中部署了与 ehcache 集成的应用程序。我需要这两个实例之间的同步,这就是我使用兵马俑的原因。但是我面临错误

“net.sf.ehcache.CacheException:get() 中未捕获的异常 - Java 堆空间”当我将 ehcache 与 terracotta 集成时。我的 ehcache.xml 是

<?xml version="1.0" encoding="UTF-8"?>

<ehcache name="terracotta" maxBytesLocalHeap="30%" >
  <diskStore path="java.io.tmpdir" />

 <terracottaConfig url="localhost:9510"/>
 <cacheManagerPeerListenerFactory
 class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

<cache name="LocalCache"
        timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta />           
</cache>


<cache name="cache1"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta />          
</cache>

<cache name="cache2"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta /> 
      </cache>

<cache name="cache3"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
            <terracotta />
</cache>

      <cache name="cache4"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
     <terracotta /> 
</cache>

 <cache name="cache5"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta />    
     </cache>

<cache name="cache6"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta /> 
</cache>

<cache name="cache7"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
     <terracotta /> 
</cache>

<cache name="cache8"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
    <terracotta /> 
</cache>

<cache name="cache9"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
    <terracotta /> 
</cache>

<cache name="cache10"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta /> 
</cache>

<cache name="DetailStockByKey"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
      <terracotta /> 
</cache>

<cache name="cache11"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
           <terracotta /> 
</cache>

<cache name="cache12"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
           <terracotta /> 
</cache>
<cache name="cache13"
    timeToLiveSeconds="10"
    maxElementsOnDisk="0"
        eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
           <terracotta /> 
</cache>
<cache name="cache15"
    timeToLiveSeconds="10"
                eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
           <!--<terracotta /> -->
</cache>

<cache name="cache14"
    timeToLiveSeconds="10"
                eternal="false" 
        memoryStoreEvictionPolicy="LFU" >
           <!--<terracotta /> -->
</cache>            
  </ehcache>

我也收到类似警告

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

我正在使用 -Xmx:1024m 来运行兵马俑。我遇到了这个问题,而且在运行独立的 ehcache.xml 时我的响应时间也更短。然而,当使用带有兵马俑的 ehcache 时,响应时间增加了 700 倍。请帮助解决此问题。我应该怎么做才能减少响应时间,我不会再遇到这个错误。提前致谢

4

0 回答 0