When --off-heap-memory-size is set to zero, GemFire throws the following exception at startup, even if --off-heap=true is removed from the cache.xml or region configuration:
Exception in thread "main" com.vmware.gemfire.deployment.modules.internal.LauncherException: java.lang.IllegalStateException: No off-heap memory has been configured.
at gemfire//com.vmware.gemfire.deployment.modules.internal.Launcher.launch(Launcher.java:90)
at gemfire//com.vmware.gemfire.deployment.modules.internal.Launcher.main(Launcher.java:103)
at org.jboss.modules.Module.run(Module.java:353)
at org.jboss.modules.Module.run(Module.java:321)
at org.jboss.modules.Main.main(Main.java:604)
at com.vmware.gemfire.bootstrap.internal.Launcher.launch(Launcher.java:64)
at com.vmware.gemfire.bootstrap.ServerLauncher.main(ServerLauncher.java:31)
Caused by: java.lang.IllegalStateException: No off-heap memory has been configured.
at gemfire//org.apache.geode.internal.cache.control.OffHeapMemoryMonitor.setCriticalThreshold(OffHeapMemoryMonitor.java:200)
at gemfire//org.apache.geode.internal.cache.control.InternalResourceManager.setCriticalOffHeapPercentage(InternalResourceManager.java:545)
at gemfire//org.apache.geode.internal.cache.xmlcache.ResourceManagerCreation.configure(ResourceManagerCreation.java:161)
at gemfire//org.apache.geode.internal.cache.xmlcache.CacheCreation.create(CacheCreation.java:548)
at gemfire//org.apache.geode.internal.cache.xmlcache.CacheCreation.create(CacheCreation.java:492)
at gemfire//org.apache.geode.internal.cache.xmlcache.CacheXmlParser.create(CacheXmlParser.java:344)
at gemfire//org.apache.geode.internal.cache.GemFireCacheImpl.loadCacheXml(GemFireCacheImpl.java:4346)
at gemfire//org.apache.geode.internal.cache.GemFireCacheImpl.initializeDeclarativeCache(GemFireCacheImpl.java:1689)
at gemfire//org.apache.geode.internal.cache.GemFireCacheImpl.initialize(GemFireCacheImpl.java:1476)
at gemfire//org.apache.geode.internal.cache.InternalCacheBuilder.create(InternalCacheBuilder.java:198)
at gemfire//org.apache.geode.internal.cache.InternalCacheBuilder.create(InternalCacheBuilder.java:163)
at gemfire//org.apache.geode.cache.CacheFactory.create(CacheFactory.java:147)
at gemfire//org.apache.geode.distributed.internal.DefaultServerLauncherCacheProvider.createCache(DefaultServerLauncherCacheProvider.java:56)
at gemfire//org.apache.geode.distributed.ServerLauncher.createCache(ServerLauncher.java:930)
at gemfire//org.apache.geode.distributed.ServerLauncher.start(ServerLauncher.java:831)
at gemfire//org.apache.geode.distributed.ServerLauncher.run(ServerLauncher.java:761)
at gemfire//org.apache.geode.distributed.ServerLauncher.main(ServerLauncher.java:272)
at gemfire//com.vmware.gemfire.deployment.modules.internal.Launcher.invokeMainClass(Launcher.java:99)
at gemfire//com.vmware.gemfire.deployment.modules.internal.Launcher.launch(Launcher.java:88)
... 6 more
This prevents the GemFire server from starting successfully.
NA
Even though --off-heap=true is removed from the region definitions, the cache.xml file still includes parameters related to off-heap memory configuration under the <resource-manager> section.
For example:
<resource-manager
critical-heap-percentage="xx"
critical-off-heap-percentage="xx"
eviction-heap-percentage="xx"
eviction-off-heap-percentage="xx"/>
These parameters (critical-off-heap-percentage and eviction-off-heap-percentage) instruct GemFire to manage off-heap memory thresholds. When no off-heap memory is configured (i.e., --off-heap-memory-size=0), GemFire cannot initialize the OffHeapMemoryMonitor, leading to the IllegalStateException.
To resolve this issue:
Edit the cache.xml file.
Remove any off-heap-related parameters from the <resource-manager> section.
Specifically, remove the following attributes if present:
critical-off-heap-percentage="xx"
eviction-off-heap-percentage="xx"
Save the file and restart the GemFire server.
After making these changes, GemFire should start successfully without the “No off-heap memory has been configured” error.