private boolean checkMemoryReleased() { long percentage = -1; long currentFreeMemory = -1; long deadline = TimeService.currentTimeMillis() + memoryReleaseTimeout; for (; ; ) { System.gc(); Runtime runtime = Runtime.getRuntime(); currentFreeMemory = runtime.freeMemory() + runtime.maxMemory() - runtime.totalMemory(); percentage = (currentFreeMemory * 100) / initialFreeMemory; if (percentage > memoryThreshold || TimeService.currentTimeMillis() > deadline) break; log.infof("Available memory: %d kB (%d%% of initial available memory - %d kB)", currentFreeMemory / 1024, percentage, initialFreeMemory / 1024); Utils.sleep(1000); } if (percentage > memoryThreshold) { return true; } log.error("Using more memory than expected!"); return false; }
public void smokeTest() throws Exception { CoreStageRunner stageRunner = new CoreStageRunner(1); Lifecycle lifecycle = stageRunner.getTraitImpl(Lifecycle.class); lifecycle.start(); MonitorStartStage monitorStartStage = new MonitorStartStage(); List<DistStageAck> acks = new ArrayList<>(1); acks.add(stageRunner.executeOnSlave(monitorStartStage, 0)); Assert.assertEquals(stageRunner.processAckOnMaster(monitorStartStage, acks), StageResult.SUCCESS); Utils.sleep(3000); MonitorStopStage monitorStopStage = new MonitorStopStage(); acks = new ArrayList<>(1); acks.add(stageRunner.executeOnSlave(monitorStopStage, 0)); Assert.assertEquals(stageRunner.processAckOnMaster(monitorStopStage, acks), StageResult.SUCCESS); } }