我在aws t2实例(一个内存为1GB)上安装kafka。
(1)我下载了kafka_2.11-0.9.0.0 (2)我运行zookeeper bin / zookeeper-server-start.sh config / zookeeper.properties (3)我尝试运行bin / kafka-server-start.sh config / server.properties 我得到了
Java HotSpot(TM)64位服务器VM警告:INFO:os :: commit_memory(0x00000000c0000000,1073741824,0)失败; error ='无法分配内存'(errno = 12)
。#
。#没有足够的内存让Java Runtime Environment继续运行。
。#Native memory allocation(mmap)无法映射1073741824字节以提交保留内存。
。#包含更多信息的错误报告文件保存为:
。#/ home / machine_name / kafka_2.11-0.9.0.0 / hs_err_pid9161.log
我检查了server.properties配置文件和文档中的所有属性,这些属性可能会尝试做类似的事情,但是找不到任何东西。
有谁知道为什么kafka在开始时试图分配1 gb?
答案 0 :(得分:12)
Kafka默认使用以下jvm内存参数,这意味着kafka将在启动时分配1GB并使用最大1GB的内存:
-Xmx1G -Xms1G
只需将KAFKA_HEAP_OPTS env变量设置为您想要使用的任何变量。您也可以编辑./bin/kafka-server-start.sh并替换值。
答案 1 :(得分:0)
此问题还可能与分配的最大内存映射区域数有关。它引发完全相同的错误。
要解决此问题,您可以运行以下命令:
sysctl -w vm.max_map_count=200000
您要相对于文件描述符限制进行设置。总之,对于代理上的每个日志段,您都需要两个地图区域-一个用于索引,一个用于时间索引。
有关参考,请参见Kafka OS部分:https://kafka.apache.org/documentation/#os
答案 2 :(得分:0)
如果您的内存堆较小,则尝试减小大小 -Xmx400M -Xms400M(适用于Zookeeper和kafka)