Apache Ignite:堆外驱逐与缓存驱逐策略及数据区OOM问题咨询
Ignite数据区内存溢出与驱逐机制解析
遇到的错误信息:
Out of memory in data region [name=default, initSize=256.0 MiB, maxSize=8.0 GiB, persistenceEnabled=false]
基础概念确认
- 非持久化数据区使用堆外(Off-heap)内存,和JVM堆内存(由-Xmx控制)完全无关,它的内存上限由数据区的
maxSize参数决定,系统必须为其预留足够的物理/虚拟内存。
数据区驱逐策略的触发时机
数据区的驱逐由内存占用阈值触发:
- 当数据区已用内存达到配置的
evictionThreshold(默认是maxSize的90%)时,Ignite会启动驱逐流程。 - 这个触发是针对整个数据区的,会通知所有归属该数据区的缓存执行各自的驱逐策略,释放堆外内存。
缓存驱逐与数据区驱逐的关联逻辑
- 数据区本身没有独立的驱逐逻辑,只是一个触发源,实际的内存释放全靠每个缓存自己配置的驱逐策略(比如LRU、LFU、按过期时间清理等)来完成。
- 如果缓存的驱逐策略腾不出足够空间(比如只清理过期数据但当前过期数据极少,或者数据写入速度远快于驱逐速度),数据区的内存占用会持续上升,直到触及
maxSize上限,最终就会出现你遇到的内存溢出错误。
内容的提问来源于stack exchange,提问作者Lokesh
相关产品推荐
相关产品推荐

