【问题标题】:GridGain Eviciton to offheapGridGain 驱逐到堆外
【发布时间】:2014-07-13 08:19:30
【问题描述】:

我面临一个问题,即 gridgain 似乎没有将条目驱逐到堆外,而只是将其丢弃。我的缓存配置是

 <bean id="test-cache" class="org.gridgain.grid.cache.GridCacheConfiguration">
    <property name="name" value="testCache"/>
     <property name="cacheMode" value="LOCAL" />
     <property name="memoryMode" value="ONHEAP_TIERED"/>
    <property name="swapEnabled" value="false"/>
    <property name="offHeapMaxMemory" value="#{1024 * 1024 * 1024 * 3}"/> 
    <property name="evictionPolicy">
        <!-- LRU eviction policy. -->
        <bean class="org.gridgain.grid.cache.eviction.lru.GridCacheLruEvictionPolicy">
            <property name="maxSize" value="40000"/>
        </bean>
    </property>
   </bean>

我开始在缓存中插入 100 万个条目,但在 put 操作结束时,我看到堆上的 40,000 个条目(使用 size())和堆外的 0 个条目(使用 offHeapEntriesCount())。我无法迭代任何堆外的东西,或者表明其他东西被丢弃了。我希望在堆外存储中找到那时。

【问题讨论】:

    标签: gridgain


    【解决方案1】:

    乍一看,offHeapMaxMemory 是以字节为单位的实际内存大小,因此您只分配了 3MB 的堆外内存,这非常小。

    尝试将offHeapMaxMemory 设置为零 (0),这意味着没有限制,看看您是否得到了预期的行为。

    【讨论】:

    • 这个问题是由于错误没有将整数转换为长整数,因此最终分配了负大小。但是我之前没有发现这个错误,因为相同的配置与 OFFHEAP_TIERED 一起工作。似乎 OFFHEAP_TIERED 对负分配进行检查并将其设置为最大值,但 ONHEAP_TIERED 没有任何此类检查。我认为在这种错误分配的情况下至少应该有一个警告或错误。
    • @GDS 根据 Javadoc,负值实际上会禁用堆外存储。
    【解决方案2】:

    我发现了这个问题。它实际上是 3GB 的分配,但 spring 表达式将其视为一个整数并违反了最大整数值,导致分配大小为负。它得到了修复

    <property name="offHeapMaxMemory" value="#{1024L * 1024L * 1024L * 3L}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2014-08-02
      相关资源
      最近更新 更多