private static void verifyCMSInitiatingOccupancyFraction(GemFireCache cache, ResourceManager rm, String cmsIOF) { if (cmsIOF == null) { cache.getLogger().warning( "Setting the CMS initiating occupancy fraction (configured using -XX:CMSInitiatingOccupancyFraction=N) is recommended so that GemFire cache eviction is optimal"); } else { // Parse the CMSInitiatingOccupancyFraction. Verify it is less than both eviction and critical // thresholds. int cmsIOFVal = Integer.parseInt(cmsIOF.split("=")[1]); float currentEvictionHeapPercentage = rm.getEvictionHeapPercentage(); if (currentEvictionHeapPercentage != 0 && currentEvictionHeapPercentage < cmsIOFVal) { cache.getLogger() .warning("Setting the CMS initiating occupancy fraction (" + cmsIOFVal + ") less than the eviction heap percentage (" + currentEvictionHeapPercentage + ") is recommended so that GemFire cache eviction is optimal"); } float currentCriticalHeapPercentage = rm.getCriticalHeapPercentage(); if (currentCriticalHeapPercentage != 0 && currentCriticalHeapPercentage < cmsIOFVal) { cache.getLogger() .warning("Setting the CMS initiating occupancy fraction (" + cmsIOFVal + ") less than the critical heap percentage (" + currentCriticalHeapPercentage + ") is recommended so that GemFire cache eviction is optimal"); } } }
/** * @param other the other ResourceManager with which to compare */ public void sameAs(ResourceManager other) { if (getCriticalHeapPercentage() != other.getCriticalHeapPercentage()) { throw new RuntimeException("Resource Manager critical heap percentages differ: " + getCriticalHeapPercentage() + " != " + other.getCriticalHeapPercentage()); } if (getCriticalOffHeapPercentage() != other.getCriticalOffHeapPercentage()) { throw new RuntimeException("Resource Manager critical off-heap percentages differ: " + getCriticalOffHeapPercentage() + " != " + other.getCriticalOffHeapPercentage()); } if (hasEvictionHeap()) { // If we don't have it set don't compare since other may have been set to // a smart default. if (getEvictionHeapPercentage() != other.getEvictionHeapPercentage()) { throw new RuntimeException("Resource Manager eviction heap percentages differ: " + getEvictionHeapPercentage() + " != " + other.getEvictionHeapPercentage()); } } if (hasEvictionOffHeap()) { // If we don't have it set don't compare since other may have been set to // a smart default. if (getEvictionOffHeapPercentage() != other.getEvictionOffHeapPercentage()) { throw new RuntimeException("Resource Manager eviction off-heap percentages differ: " + getEvictionOffHeapPercentage() + " != " + other.getEvictionOffHeapPercentage()); } } }
protected void initializeResourceManager() { float currentEvictionHeapPercentage = rm.getEvictionHeapPercentage(); float currentCriticalHeapPercentage = rm.getCriticalHeapPercentage(); builder.append("Actual eviction heap percentage=").append(rm.getEvictionHeapPercentage()) .append("; critical heap percentage=").append(rm.getCriticalHeapPercentage()); getLogger().debug(builder.toString());
int ehp = (int) this.cache.getResourceManager().getEvictionHeapPercentage(); if (generateDefaults() || ehp != MemoryThresholds.DEFAULT_EVICTION_PERCENTAGE) atts.addAttribute("", "", EVICTION_HEAP_PERCENTAGE, "", String.valueOf(ehp));
/** * Do a rebalance and verify balance was improved. If evictionPercentage > 0 (the default) then we * have heapLRU and this can cause simulate and rebalance results to differ if eviction kicks in * between. (See BUG 44899). */ public static void doRebalance() { ResourceManager resMan = cache.getResourceManager(); boolean heapEviction = (resMan.getEvictionHeapPercentage() > 0); RebalanceFactory factory = resMan.createRebalanceFactory(); try { RebalanceResults simulateResults = null; if (!heapEviction) { LogWriterUtils.getLogWriter().info("Calling rebalance simulate"); RebalanceOperation simulateOp = factory.simulate(); simulateResults = simulateOp.getResults(); } LogWriterUtils.getLogWriter().info("Starting rebalancing"); RebalanceOperation rebalanceOp = factory.start(); RebalanceResults rebalanceResults = rebalanceOp.getResults(); } catch (InterruptedException e) { Assert.fail("Interrupted", e); } }
public static ResourceManager mockResourceManager() { ResourceManager mockResourceManager = mock(ResourceManager.class); AtomicReference<Float> criticalHeapPercentage = new AtomicReference<>(ResourceManager.DEFAULT_CRITICAL_PERCENTAGE); AtomicReference<Float> criticalOffHeapPercentage = new AtomicReference<>(0.0f); AtomicReference<Float> evictionHeapPercentage = new AtomicReference<>(ResourceManager.DEFAULT_EVICTION_PERCENTAGE); AtomicReference<Float> evictionOffHeapPercentage = new AtomicReference<>(0.0f); doAnswer(newSetter(criticalHeapPercentage, null)) .when(mockResourceManager).setCriticalHeapPercentage(anyFloat()); doAnswer(newSetter(criticalOffHeapPercentage, null)) .when(mockResourceManager).setCriticalOffHeapPercentage(anyFloat()); doAnswer(newSetter(evictionHeapPercentage, null)) .when(mockResourceManager).setEvictionHeapPercentage(anyFloat()); doAnswer(newSetter(evictionOffHeapPercentage, null)) .when(mockResourceManager).setEvictionOffHeapPercentage(anyFloat()); when(mockResourceManager.getCriticalHeapPercentage()).thenAnswer(newGetter(criticalHeapPercentage)); when(mockResourceManager.getCriticalOffHeapPercentage()).thenAnswer(newGetter(criticalOffHeapPercentage)); when(mockResourceManager.getEvictionHeapPercentage()).thenAnswer(newGetter(evictionHeapPercentage)); when(mockResourceManager.getEvictionOffHeapPercentage()).thenAnswer(newGetter(evictionOffHeapPercentage)); when(mockResourceManager.getRebalanceOperations()).thenReturn(Collections.emptySet()); return mockResourceManager; }
private Function<Health.Builder, Health.Builder> withResourceManagerDetails() { return healthBuilder -> getGemFireCache() .map(GemFireCache::getResourceManager) .map(resourceManager -> healthBuilder .withDetail("geode.resource-manager.critical-heap-percentage", resourceManager.getCriticalHeapPercentage()) .withDetail("geode.resource-manager.critical-off-heap-percentage", resourceManager.getCriticalOffHeapPercentage()) .withDetail("geode.resource-manager.eviction-heap-percentage", resourceManager.getEvictionHeapPercentage()) .withDetail("geode.resource-manager.eviction-off-heap-percentage", resourceManager.getEvictionOffHeapPercentage()) ) .orElse(healthBuilder); }
private static void verifyCMSInitiatingOccupancyFraction(GemFireCache cache, ResourceManager rm, String cmsIOF) { if (cmsIOF == null) { cache.getLogger().warning( "Setting the CMS initiating occupancy fraction (configured using -XX:CMSInitiatingOccupancyFraction=N) is recommended so that GemFire cache eviction is optimal"); } else { // Parse the CMSInitiatingOccupancyFraction. Verify it is less than both eviction and critical // thresholds. int cmsIOFVal = Integer.parseInt(cmsIOF.split("=")[1]); float currentEvictionHeapPercentage = rm.getEvictionHeapPercentage(); if (currentEvictionHeapPercentage != 0 && currentEvictionHeapPercentage < cmsIOFVal) { cache.getLogger() .warning("Setting the CMS initiating occupancy fraction (" + cmsIOFVal + ") less than the eviction heap percentage (" + currentEvictionHeapPercentage + ") is recommended so that GemFire cache eviction is optimal"); } float currentCriticalHeapPercentage = rm.getCriticalHeapPercentage(); if (currentCriticalHeapPercentage != 0 && currentCriticalHeapPercentage < cmsIOFVal) { cache.getLogger() .warning("Setting the CMS initiating occupancy fraction (" + cmsIOFVal + ") less than the critical heap percentage (" + currentCriticalHeapPercentage + ") is recommended so that GemFire cache eviction is optimal"); } } }
protected void initializeResourceManager() { float currentEvictionHeapPercentage = rm.getEvictionHeapPercentage(); float currentCriticalHeapPercentage = rm.getCriticalHeapPercentage(); builder.append("Actual eviction heap percentage=").append(rm.getEvictionHeapPercentage()) .append("; critical heap percentage=").append(rm.getCriticalHeapPercentage()); getLogger().debug(builder.toString());