今天在新的机器上部署 druid , 起来后发现有 task 错误, 提示是 direct memory 不够.
日志
错误日志如下:
2017-03-23T16:49:43,161 ERROR [main] io.druid.cli.CliPeon - Error when starting up. Failing. |
如上日志所示, 当前需要 memoryNeeded[2,684,354,560]
的 direct memory,
但是当前只有 maxDirectMemory[1,908,932,608]
这么多.
因为 memoryNeeded 的值是这么计算出来的:druid.processing.buffer.sizeBytes * ( druid.processing.numThreads + 1 )
,
因此可以调整 -XX:MaxDirectMemorySize
, druid.processing.buffer.sizeBytes
,
或者 druid.processing.numThreads
这三者之一.
druid.processing 下的 buffer 和 numThreads 设置
druid.processing.buffer.sizeBytes
设置是在middleManager/runtime.properties:15:druid.processing.buffer.sizeBytes=..
druid.processing.numThreads
设置是在middleManager/runtime.properties:16:druid.processing.numThreads=
具体的值要根据 -XX:MaxDirectMemorySize
来选择设置, 计算后不能超过 -XX:MaxDirectMemorySize
,
而默认的 -XX:MaxDirectMemorySize
值,
可以参考这篇博文 : Default HotSpot Maximum Direct Memory Size - DZone Java.
-XX:MaxDirectMemorySize
如果的确有需求, 而 druid.processing.buffer.sizeBytes
和 druid.processing.numThreads
都需要保留,
那么只有改 -XX:MaxDirectMemorySize
了,
可以把设置加到这个地方 :druid/middleManager/runtime.properties:8:druid.indexer.runner.javaOpts=..