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

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

解决方案:

既然挂了那就重启呗,但是 启动kafka提示'cannot allocate memory'意思是不能分配内存, 还附带了一个错误日志报告的文件路径。
查看那个刚才提示的错误日志报告, OOM异常
分析前两行的意思:
// 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即可启动。
修改完后保存,进入bin目录重新启动, 没有报错信息。
cd bin
./kafka-server-start.sh ../config/server.properties
通过 查看kafka的所有主题 来判断kafka是否正常运行,成功打印出了所有现存的topic,可知kafka启动成功了。
因为我们需要kafka持久的在后台不停运行,所以还需要把kafka设置为守护线程方式启动。Ctrl + Z终止前台启动的kafka程序后,输入以下命令让kafka以守护线程的方式启动。
cd bin
./kafka-server-start.sh -daemon ../config/server.properties
通过 查看kafka的所有主题 来判断kafka是否正常运行,成功打印出了所有现存的topic,可知kafka启动成功了。
本来以为问题应该解决了,访问网页,刷新网页后,出现了网关错误。
不知道是什么原因,但是重启tomcat之后就没问题了,这里不知道是什么原因导致的。解决了问题就没有去深究了,等以后碰到这个问题再来解决。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值