if (allAssignmentsHavePropagated(queries)) { if (reservedPool.getAssignedQueries() == 0 && generalPool.getBlockedNodes() > 0) { QueryExecution biggestQuery = null; long bytesUsed = getQueryMemoryReservation(queryExecution); if (bytesUsed > maxMemory) { biggestQuery = queryExecution;
boolean outOfMemory = isClusterOutOfMemory(); if (!outOfMemory) { lastTimeNotOutOfMemory = System.nanoTime(); DataSize memory = succinctBytes(getQueryMemoryReservation(query)); query.fail(new PrestoException(CLUSTER_OUT_OF_MEMORY, format("The cluster is out of memory and %s=true, so this query was killed. It was using %s of memory", RESOURCE_OVERCOMMIT, memory))); !queryKilled && nanosSince(lastTimeNotOutOfMemory).compareTo(killOnOutOfMemoryDelay) > 0) { if (isLastKilledQueryGone()) { callOomKiller(runningQueries); updatePools(countByPool); assignmentsRequest = updateAssignments(runningQueries); updateNodes(assignmentsRequest);
/** * Enforce memory limits at the query level */ private void enforceMemoryLimits() { List<QueryExecution> runningQueries = queryTracker.getAllQueries().stream() .filter(query -> query.getState() == RUNNING) .collect(toImmutableList()); memoryManager.process(runningQueries, this::getQueries); }
boolean outOfMemory = isClusterOutOfMemory(); if (!outOfMemory) { lastTimeNotOutOfMemory = System.nanoTime(); updatePools(countByPool); updateNodes(updateAssignments(queries));
if (reservedPool != null && generalPool != null && allAssignmentsHavePropagated(queries)) { if (reservedPool.getAssignedQueries() == 0 && generalPool.getBlockedNodes() > 0) { QueryExecution biggestQuery = null;
@GET @Path("memory") public Response getClusterMemoryPoolInfo() { return Response.ok() .entity(clusterMemoryManager.getMemoryPoolInfo()) .build(); }
"maxQueryMemory cannot be greater than maxQueryTotalMemory"); this.pools = createClusterMemoryPools(nodeMemoryConfig.isLegacySystemPoolEnabled(), nodeMemoryConfig.isReservedPoolEnabled());
/** * Enforce memory limits at the query level */ public void enforceMemoryLimits() { memoryManager.process(queries.values().stream() .filter(query -> query.getState() == RUNNING) .collect(toImmutableList())); }