druid灌库报错-Not enough direct memory

在执行Druid灌库脚本时遇到内存不足的问题,错误信息指出需要调整-XX:MaxDirectMemorySize、druid的相关配置参数。解决方案包括增大JVM的directMemorySize,减小druid.processing.buffer.sizeBytes、druid.processing.numMergeBuffers和druid.processing.numThreads。调整主要是针对middleManager节点,因为它是执行灌库任务的节点。需要修改running.properties和jvm.properties配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Druid灌库脚本提交之后,看灌库控制台,报错如下

2) Not enough direct memory.  Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers: maxDirectMemory[954,728,448], memoryNeeded[1,677,721,600] = druid.processing.buffer.sizeBytes[335,544,320] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1)

  at io.druid.guice.DruidProcessingModule.getIntermediateResultsPool(DruidProcessingModule.java:110) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> io.druid.guice.DruidProcessingModule)

 

上面的报错日志非常详细,原因是druid灌库使用的内存超过jvm的直接内存

 

给的解决方案也很详细

要设置jvm的directMemorySize > druid.processing.buffer.sizeBytes[335,544,320] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1)

 

将middleManager节点上的

jvm的directMemorySize 调大

druid.processing.buffer.sizeBytes 调小

druid.processing.numMergeBuffers 调小

druid.processing.numThreads 调小

意思是jvm的直接内存调大,这个上限是整个物理机的内存上限,不是jvm最大内存

druid灌库的单个缓冲区调小,线程数调小,使用到的合并缓冲区调小

 

为什么调middleManager节点

灌库的indexService服务,由overload节点担任主节点,middleManager节点具体执行灌库任务,所以调节middleManager

 

登录druid集群中的middleManager节点,看到两个配置文件

running.properties

jvm.properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值