解决Linux Kafka内存溢出问题需从JVM、Kafka配置及系统层面综合优化,具体步骤如下:
kafka-server-start.sh
中KAFKA_HEAP_OPTS
,设置合理的初始堆(-Xms
)和最大堆(-Xmx
),建议为服务器内存的50%左右,避免超过8GB(如-Xms4G -Xmx4G
)。-XX:+UseG1GC
,并设置-XX:MaxGCPauseMillis=20
(目标暂停时间20ms)和-XX:InitiatingHeapOccupancyPercent=35
(堆占用35%时触发GC),减少Full GC停顿。-XX:+HeapDumpOnOutOfMemoryError
和-Xlog:gc*
参数,生成堆转储文件用于分析内存泄漏。buffer.memory
参数(默认32MB),建议设置为可用内存的50%-70%,避免一次性加载过多数据。batch.size
控制单批次消息大小(默认16KB),增大可提升吞吐量但增加延迟,需根据业务调整。ulimit -n 65535
,避免因文件句柄不足导致内存溢出。vm.swappiness=10
(降低交换分区使用倾向),减少OOM Killer误杀风险。jstat
、VisualVM
等工具监控内存使用,若频繁GC或堆内存持续高位,需增加服务器内存或优化分区数。操作前建议:在测试环境验证配置效果,避免直接在生产环境修改关键参数。参考来源: