其他分享
首页 > 其他分享> > 启动kafka提示OOM异常,cannot allocate memory

启动kafka提示OOM异常,cannot allocate memory

作者:互联网

今天想对牛客网进行一个项目总结,随便点了几个功能,测试发帖功能的时候,没有发帖成功,页面卡主了,进入到服务器中查看项目日志: 略过了许多看不懂的报错之后,看到了几行看得懂的报错信息,内容如下图片所示,提示'Topic publish not present in metadata after 60000ms'发送失败。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 因为我发帖之后会把帖子也往Elasticsearch中也存一份,这其中是通过kafka来传递这个存储事件,事件的topic就叫 ‘publish’, 既然这里出现了发送失败的异常,很有可能是kafak挂掉了。 通过查看kafka的所有主题来判断kafka是否正常运行,发现连不上broker,报错了
bin/kafka-topics.sh --list --bootstrap-server localhost:9092;
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 根据这个报错提示,应该就是kafka没有启动。所以得出原因应该是kafka挂了,导致发送消息事件失败,从而导致发帖异常。

解决方案:

既然挂了那就重启呗,但是启动kafka提示'cannot allocate memory'意思是不能分配内存, 还附带了一个错误日志报告的文件路径。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 查看那个刚才提示的错误日志报告,OOM异常 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 分析前两行的意思:
// Java运行时环境的内存不足,无法继续运行。
## There is insufficient memory for the Java Runtime Environment to continue.    
// 1073741824刚好是1G, 这句话的意思是本机内存分配未能为提交保留内存分配1G内存。
# Native memory allocation (malloc) failed to allocate 1073741824 bytes for committing reserved memory.
从这两行提示信息来看,应该是内存不够,经过百度,发现是kafka默认启动内存是1G, 而JVM默认内存也是1G, JVM自然不能所有内存都分配给kafka, 所以kafka就启动不了,解决方法是把kafka的最小启动内存设置为小于1G的值,即把kafka-server-start.sh中把'export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"'中的Xms设置为256M, 这样,kafka最小只需要256M即可启动。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 修改完后保存,进入bin目录重新启动, 没有报错信息。
cd bin
./kafka-server-start.sh ../config/server.properties
通过查看kafka的所有主题来判断kafka是否正常运行,成功打印出了所有现存的topic,可知kafka启动成功了。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 因为我们需要kafka持久的在后台不停运行,所以还需要把kafka设置为守护线程方式启动。Ctrl + Z终止前台启动的kafka程序后,输入以下命令让kafka以守护线程的方式启动。
cd bin
./kafka-server-start.sh -daemon ../config/server.properties
通过查看kafka的所有主题来判断kafka是否正常运行,成功打印出了所有现存的topic,可知kafka启动成功了。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 本来以为问题应该解决了,访问网页,刷新网页后,出现了网关错误。 watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 不知道是什么原因,但是重启tomcat之后就没问题了,这里不知道是什么原因导致的。解决了问题就没有去深究了,等以后碰到这个问题再来解决。 参考:kafka启动时内存异常

标签:启动,OOM,server,cannot,报错,内存,1G,kafka
来源: https://blog.51cto.com/u_14201949/2832756