使用Java 11启动Apache NiFi 1.23.2时内存不足问题求助
解决Java 11下Apache NiFi 1.23.2 8GB内存配置启动失败问题
问题原因
Java 11默认使用G1垃圾收集器,相比Java 8默认的Parallel GC,G1需要额外的内存开销(包括Metaspace、直接内存、JVM原生内存等)。当你配置-Xms8192m/-Xmx8192m时,堆内存已占满实例的8GB内存,剩余空间不足以支撑JVM其他内存区域的分配,导致原生内存分配失败。
解决方案
1. 适度降低堆内存配置
减少堆内存大小,给JVM预留足够的非堆内存空间。修改bootstrap.conf中的内存参数:
# JVM memory settings java.arg.2=-Xms7168m java.arg.3=-Xmx7168m
可根据实例剩余内存情况调整(比如7G或7.5G),确保堆内存+非堆内存总占用不超过系统可用内存。
2. 显式限制非堆内存区域
通过JVM参数限制Metaspace和直接内存的大小,避免其无限制占用内存。在bootstrap.conf中添加以下参数:
# 限制元空间大小 java.arg.4=-XX:MaxMetaspaceSize=512m # 限制直接内存大小 java.arg.5=-XX:MaxDirectMemorySize=1024m
3. 检查系统可用内存
执行系统命令查看当前可用内存:
free -h
确保系统空闲内存(包括swap)足够支撑JVM堆内存+非堆内存的总开销。如果swap不足,可适当调整swap大小。
4. 分析错误日志详情
查看hs_err_pid21924.log文件,里面会明确指出内存分配失败的具体区域(比如Metaspace、直接内存或JVM原生内存),根据日志信息精准调整对应参数。
内容的提问来源于stack exchange,提问作者alvarosaavedra
相关产品推荐
相关产品推荐

