Apache Ignite堆外内存不工作(我猜)

Apache Ignite堆外内存不工作(我猜),ignite,Ignite,我正在开发简单的分布式内存键值存储服务。 在我的例子中,我使用maven依赖性嵌入Ignite 该应用程序具有简单的控制器,即get和put API Get API是从ignite缓存获取对象,Put API是将对象放入ignite缓存 无论如何,我做了负载测试,并使用VisualVM监视jvm状态,我观察了每个堆区域,例如eden、suv、old使用VisualGC插件和DirectBufferMonitor使用buffer插件 当我开始负载测试时,伊甸园区域逐渐填满,移动了旧区域,而不是直接

我正在开发简单的分布式内存键值存储服务。 在我的例子中,我使用maven依赖性嵌入Ignite

该应用程序具有简单的控制器,即get和put API

Get API是从ignite缓存获取对象,Put API是将对象放入ignite缓存

无论如何,我做了负载测试,并使用VisualVM监视jvm状态,我观察了每个堆区域,例如eden、suv、old使用VisualGC插件和DirectBufferMonitor使用buffer插件

当我开始负载测试时,伊甸园区域逐渐填满,移动了旧区域,而不是直接缓冲区。负载测试结束时,直接缓冲区仅使用150kb,而旧区使用512m。

※数据大小可能为500mb

我猜,直接缓冲区几乎没有使用。为什么?这是我的配置

-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1g -Xmx1g -XX:MaxDirectMemorySize=6g -XX:+AlwaysPreTouch -XX:NewSize=512m -XX:GCTimeRatio=4 -XX:InitiatingHeapOccupancyPercent=30 -XX:ConcGCThreads=4 -XX:+UseParNewGC -XX:+UseTLAB -XX:+ScavengeBeforeFullGC -XX:MaxNewSize=512m -XX:MaxMetaspaceSize=128m -XX:CompressedClassSpaceSize=32m -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+CMSScavengeBeforeRemark -XX:ParallelGCThreads=6 -XX:MaxTenuringThreshold=5 -XX:MaxGCPauseMillis=1000 -XX:+DisableExplicitGC -XX:+ExplicitGCInvokesConcurrent -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/log/catalina/cc.rnd.subnode1/GC.log -XX:+CMSClassUnloadingEnabled -Dspring.profiles.active=production

Ignite使用sun.misc.Unsafe在堆外空间存储数据。这提供了最大的性能和灵活性,但它没有反映在监视工具中。直接缓冲区主要用于节点之间的通信。您可以通过分析java进程大小和使用的堆来观察内存消耗—对于大数据,进程大小将比堆大得多

如果使用ApacheIgnite1.x版本,则需要进行配置。默认情况下,2.0+版本使用堆外