我在Linux上使用了Gemfire v7.0.1.3。下面是我的缓存xml。
<?xml version.....>
<!DOCTYPE....>
<cache is-server="true">
<disk-store name="myStore" auto-compact="false" max-oplog-size="1000" queue-size="10000" time-interval="150">
<disk-dirs>
<disk-dir>.....</disk-dir>
</disk-dirs>
</disk-store>
<region name="myRegion" refid="PARTITION_PARSISTENT_OVERFLOW">
<region-attributes disk-store-name="myStore" disk-synchronous="true">
<eviction-attributes>
<lru-entry-count maximum="500" action="overflow-to-disk" />
</eviction-attributes>
</region-attributes>
</region>
</cache>
现在我开始分配8GB的缓存服务器。当我使用字符串作为缓存键和一个自定义对象(每个对象有4个双数组,每个10000大小)作为值时,我可以在缓存中存储500万个对象而没有任何问题。我可以看到磁盘存储目录有. crf、.krf、.drf文件。如果我重新启动缓存,元素正在恢复,都是好东西。但是,如果我使用自定义对象作为键和值,在区域中创建25000(大约)个条目后,我开始得到低内存异常。这是预期的行为吗?因为Gemfire留档说当我们一起使用持久性和溢出时,所有键和最近最少使用的值都会溢出到磁盘,大多数活动条目值都保存在内存中。所以,我希望,只要我的磁盘存储中有可用空间,我就可以在该区域存储任意数量的对象。但是我得到了低内存异常。请帮助我理解。
谢啦
键永远不会溢出到磁盘,因此您的内存必须足够大以容纳所有键。对于持久区域,键也会写入磁盘,但这仅用于恢复目的。因此,如果对象键的大小远大于字符串键的大小,则会出现此行为。