public Memory(RuntimeInfo runtime) { maxMemory = runtime.getMaxHeapSizeBytes(); totalMemory = runtime.getTotalHeapSizeBytes(); freeMemory = runtime.getFreeHeapSizeBytes(); usedMemory = totalMemory - freeMemory; directMemory = runtime.getDirectMemorySizeBytes(); }
public int intermediateComputeSizeBytes() { int sizeBytesConfigured = intermediateComputeSizeBytesConfigured(); if (sizeBytesConfigured != DEFAULT_PROCESSING_BUFFER_SIZE_BYTES) { return sizeBytesConfigured; } else if (computedBufferSizeBytes.get() != null) { return computedBufferSizeBytes.get(); } long directSizeBytes = JvmUtils.getRuntimeInfo().getDirectMemorySizeBytes(); int numProcessingThreads = getNumThreads(); int numMergeBuffers = getNumMergeBuffers(); int totalNumBuffers = numMergeBuffers + numProcessingThreads; int sizePerBuffer = (int) ((double) directSizeBytes / (double) (totalNumBuffers + 1)); final int computedSizePerBuffer = Math.min(sizePerBuffer, MAX_DEFAULT_PROCESSING_BUFFER_SIZE_BYTES); if (computedBufferSizeBytes.compareAndSet(null, computedSizePerBuffer)) { log.info( "Auto sizing buffers to [%,d] bytes each for [%,d] processing and [%,d] merge buffers " + "out of [%,d] max direct memory", computedSizePerBuffer, numProcessingThreads, numMergeBuffers, directSizeBytes ); } return computedSizePerBuffer; }
JvmUtils.getRuntimeInfo().getTotalHeapSizeBytes(), JvmUtils.getRuntimeInfo().getMaxHeapSizeBytes(), JvmUtils.getRuntimeInfo().getDirectMemorySizeBytes() );
private void verifyDirectMemory(DruidProcessingConfig config) { try { final long maxDirectMemory = JvmUtils.getRuntimeInfo().getDirectMemorySizeBytes(); final long memoryNeeded = (long) config.intermediateComputeSizeBytes() * (config.getNumMergeBuffers() + config.getNumThreads() + 1); if (maxDirectMemory < memoryNeeded) { throw new ProvisionException( StringUtils.format( "Not enough direct memory. Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers: " + "maxDirectMemory[%,d], memoryNeeded[%,d] = druid.processing.buffer.sizeBytes[%,d] * (druid.processing.numMergeBuffers[%,d] + druid.processing.numThreads[%,d] + 1)", maxDirectMemory, memoryNeeded, config.intermediateComputeSizeBytes(), config.getNumMergeBuffers(), config.getNumThreads() ) ); } } catch (UnsupportedOperationException e) { log.info( "Could not verify that you have enough direct memory, so I hope you do! Error message was: %s", e.getMessage() ); } } }
@Test public void testgetMaxDirectMemory() { try { long maxMemory = JvmUtils.getRuntimeInfo().getDirectMemorySizeBytes(); Assert.assertTrue((maxMemory > 0)); } catch (UnsupportedOperationException expected) { Assert.assertTrue(true); } catch (RuntimeException expected) { Assert.assertTrue(true); } } }