private boolean hasExceededResources() { if (TestCaseExecutor.getInstance().getNumStalledThreads() >= Properties.MAX_STALLED_THREADS) { logger.info("* Too many stalled threads: " + TestCaseExecutor.getInstance().getNumStalledThreads() + " / " + Properties.MAX_STALLED_THREADS); return true; } Runtime runtime = Runtime.getRuntime(); long freeMem = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); if (freeMem < Properties.MIN_FREE_MEM) { logger.trace("* Running out of memory, calling GC with memory left: " + freeMem + " / " + runtime.maxMemory()); System.gc(); freeMem = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); if (freeMem < Properties.MIN_FREE_MEM) { logger.info("* Running out of memory, giving up: " + freeMem + " / " + runtime.maxMemory() + " - need " + Properties.MIN_FREE_MEM); return true; } else { logger.trace("* Garbage collection recovered sufficient memory: " + freeMem + " / " + runtime.maxMemory()); } } return false; }
/** {@inheritDoc} */ @Override public Thread newThread(Runnable r) { if (currentThread != null && currentThread.isAlive()) { currentThread.setPriority(Thread.MIN_PRIORITY); stalledThreads.add(currentThread); logger.info("Current number of stalled threads: " + getNumStalledThreads()); } else { logger.info("No stalled threads"); } if (threadGroup != null) { PermissionStatistics.getInstance().countThreads(threadGroup.activeCount()); } threadGroup = new ThreadGroup(TEST_EXECUTION_THREAD_GROUP); currentThread = new Thread(threadGroup, r); currentThread.setName(TEST_EXECUTION_THREAD + "_" + threadCounter); threadCounter++; currentThread.setContextClassLoader(TestGenerationContext.getInstance().getClassLoaderForSUT()); ExecutionTracer.setThread(currentThread); return currentThread; }
logger.info("Run is finished - " + currentThread.isAlive() + ": " + getNumStalledThreads());