Apache Ignite关闭堆内存不起作用(我的猜测)

时间:2017-08-08 06:41:20

标签: ignite

我正在开发简单的内存键值存储服务。 就我而言,我将Ignite嵌入使用maven依赖。

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

Get API是来自点火缓存的get对象,Put API是put对象来点燃缓存。

无论如何,我做加载测试并且我使用visual vm监视jvm状态,我使用visual gc插件和使用缓冲区监视器插件的直接缓冲区观察每个堆区域(例如eden,suv,old)。

当我开始加载测试时,伊甸园区域逐渐填满并移动旧区域,而不是直接缓冲区。当负载测试结束时,直接缓冲区仅使用150kb,但旧区域使用512m Image by visualGC
Image by buffer monitor plugin

※数据大小可能是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

1 个答案:

答案 0 :(得分:1)

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

如果您使用Apache Ignite 1.x版本,则需要配置off-heap。 2.0+版本默认使用off-heap。