在 Ubuntu 上运行 Kafka 时报“内存错”(如 Cannot allocate memory、OutOfMemoryError、mmap failed 等),通常不是 Kafka 代码问题,而是系统资源限制或配置不当导致的。下面按常见原因逐一说明和解决。
Kafka 默认或你手动配置的 JVM 堆内存超过了服务器可用内存。
典型报错:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(...) failed
Error occurred during initialization of VM
Could not reserve enough space for object heap
检查:
grep Xmx config/server.properties
# 或看启动脚本
vi bin/kafka-server-start.sh
解决:
bin/kafka-server-start.sh 或环境变量:export KAFKA_HEAP_OPTS="-Xms512M -Xmx1G"
-Xmx1G-Xmx512MKafka + Zookeeper 同时跑,内存吃紧。
检查:
free -h
top
解决:
vm.max_map_count 太小(非常常见)Kafka / Elasticsearch 类应用需要大量 mmap。
报错示例:
mmap failed for C++ heap
解决:
# 查看
cat /proc/sys/vm/max_map_count
# 临时修改
sudo sysctl -w vm.max_map_count=262144
# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
ulimit 限制文件描述符或进程数不足。
报错:
Too many open files
检查:
ulimit -n
解决:
sudo vi /etc/security/limits.conf
添加:
* soft nofile 65536
* hard nofile 65536
修改后重新登录或重启。
如果你用:
bin/kafka-server-start.sh config/kraft/server.properties
但仍然用老 JVM 参数,也会内存崩。
建议:
export KAFKA_HEAP_OPTS="-Xms1G -Xmx1G"
free -h
cat /proc/sys/vm/max_map_count
ulimit -n
grep Xmx bin/kafka-server-start.sh
export KAFKA_HEAP_OPTS="-Xms256M -Xmx512M"
如果你愿意,可以把完整报错信息或 server.properties 发出来,我可以直接帮你定位是哪一类内存错误。