Java 为什么Apache Ignite sys线程会消耗这么多内存?

Java 为什么Apache Ignite sys线程会消耗这么多内存?,java,out-of-memory,ignite,Java,Out Of Memory,Ignite,环境资料: 我的集群中有两个Linux-machine8U 16G 64位节点。我启用了Ignite本机持久性。堆外内存为3.2G。Ignite版本为2.6.0 使用信息: 群集中有三个缓存,只有一个备份。总共大约有100000条记录。 重新平衡的螺纹数为1 我的问题: 当我重复执行sql select*时,会出现内存不足的错误。我用MAT分析转储文件,发现一个线程占用了太多内存。然后我分析了线程堆栈,发现在ignite方法org.apache.ignite.internal.processor

环境资料: 我的集群中有两个Linux-machine8U 16G 64位节点。我启用了Ignite本机持久性。堆外内存为3.2G。Ignite版本为2.6.0

使用信息: 群集中有三个缓存,只有一个备份。总共大约有100000条记录。 重新平衡的螺纹数为1

我的问题: 当我重复执行sql select*时,会出现内存不足的错误。我用MAT分析转储文件,发现一个线程占用了太多内存。然后我分析了线程堆栈,发现在ignite方法org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.rebalanceIterator中,创建了一个树映射,占用了近7G内存! 有人能帮我解决内存不足的问题吗

JVM选项: -服务器 -XX:MaxDirectMemorySize=512m -Xms10g-Xmx10g -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+好斗的人 -XX:+GC -XX:+DisableExplicitGC -XX:+UseNUMA -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+打印日期戳 -XX:+PrintAdaptiveSizePolicy -XX:+解除锁定诊断VMOptions -XX:+G1打印区域活动信息 -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:G1保留百分比=15 -XX:InitiatingHeapOccupancyPercent=45 -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -XX:+HEAPDUMPONAUTOFMEMORYERROR
-XX:+ExitOnOutOfMemoryError看起来集群中同时运行了重新平衡和select*查询

重新平衡是一个过程,它在节点之间移动分区以实现配置的备份因数。所有重新平衡的数据都会通过堆,因此在此过程中可能会受到污染。您可以在此处阅读:

重新平衡可以通过日志中的相应消息或通过等待方法返回的未来来跟踪

select*也是一个非常耗时的操作,因为它需要将所有数据加载到单个节点

在这种情况下,使用查询可能会有所帮助。您可以在或作为属性中启用此标志