啟動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之后就沒問題了,這里不知道是什么原因導致的。解決了問題就沒有去深究了,等以后碰到這個問題再來解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM