• 启动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之后就没问题了,这里不知道是什么原因导致的。解决了问题就没有去深究了,等以后碰到这个问题再来解决。
  • 相关阅读:
    2016/07/05 配置虚拟域名 三部曲
    sublime下Docblocker插件自定义配置
    掌握Thinkphp3.2.0----标签库
    掌握Thinkphp3.2.0----内置标签
    掌握Thinkphp3.2.0----模版基础
    掌握Thinkphp3.2.0----视图
    掌握Thinkphp3.2.0----自动完成
    掌握Thinkphp3.2.0----自动验证
    掌握Thinkphp3.2.0----CURD
    掌握Thinkphp3.2.0----连贯操作
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/14092865.html
Copyright © 2020-2023  润新知