溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RocketMQ進程自動退出排查的示例分析

發(fā)布時間:2021-12-09 09:10:18 來源:億速云 閱讀:170 作者:柒染 欄目:大數(shù)據(jù)

RocketMQ進程自動退出排查的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

 

1、背景

一個 RocketMQ 集群由4主4從組成,突然其中3臺服務(wù)器“竟然”在同一時間下線,其監(jiān)控顯示如下:

RocketMQ進程自動退出排查的示例分析  

 
依次查看三臺機器的監(jiān)控圖形,時間戳幾乎完美“吻合”,不可思議吧。  
 

2、故障分析

出現(xiàn)問題,先二話不說,馬上重啟各服務(wù)器,盡快恢復(fù)集群,降低對業(yè)務(wù)的影響,接下來開始對日志進行分析。

Java 進程自動退出(rocketmq 本身就是一個java進程),一種最常見的問題是由于內(nèi)存溢出或由于內(nèi)存泄漏導(dǎo)致進程發(fā)送Crash等。由于我們的啟動參數(shù)中未配置

  • -XX:+HeapDumpOnOutOfMemoryError

  • -XX:HeapDumpPath=/opt/jvmdump

這兩個參數(shù),不能直接根據(jù) 是否生成 dump 文件,那退而求其次去查看其GC日志,將GC日志下載到本地,然后可以使用一個在線gc日志分析工具:https://gceasy.io/ ,將 gc 日志上傳后會給出圖形化的展示,其圖如下:

RocketMQ進程自動退出排查的示例分析  

 
RocketMQ進程自動退出排查的示例分析  

 
發(fā)現(xiàn)垃圾回收很正常。

既然 Java 進程不是由于內(nèi)存溢出等問題導(dǎo)致的退出,那又會是什么原因呢?那我們來看一下那個點的broker的日志,其關(guān)鍵日志截圖如下:

RocketMQ進程自動退出排查的示例分析  

 
發(fā)現(xiàn) broker 日志中有打印出 shutdownHook,表示在進程退出之前執(zhí)行了啟動時注冊時的退出鉤子函數(shù),說明 broker 是正常停止的,并且也不可能是 kill -9 命令,肯定是顯示的執(zhí)行了 shutodown 或 kill 命令,于是立馬使用 history 命令 查看歷史命令,都未在指定時間執(zhí)行過該命令,并且切換到 root 命令后,同樣使用 history 命令,并未發(fā)現(xiàn)端倪。

但我始終相信,肯定是執(zhí)行了手動執(zhí)行了 kill 命令導(dǎo)致進程退出的,經(jīng)過網(wǎng)上查找查,得知可以通過查閱系統(tǒng)日志/var/log/messages 來查看系統(tǒng)命令的調(diào)用,于是乎把日志文件下載到本地,開始搜索 kill 關(guān)鍵字,發(fā)現(xiàn)如下日志:

RocketMQ進程自動退出排查的示例分析  

 
發(fā)現(xiàn)最近一次 kill 命令是在25號的凌晨1點多,停止 rocketmq 集群,并使用 bin/mqbroker -c conf/broker-b.conf & 進行了重新啟動。

這個命令是有問題的,沒有使用 nohup ,如果會話失效,該進程就會被退出,為了驗證,我們再查一下進程退出時的日志:

RocketMQ進程自動退出排查的示例分析  

 
發(fā)現(xiàn)在故障發(fā)生點確實有 Removed 相關(guān)的日志。

故障原因基本分析到位了,運維在啟動的時候沒有使用 nohup 來啟動,故馬上排查剛啟動的集群的方式,重新重啟剛啟動的 Broker。

RocketMQ優(yōu)雅重啟小建議:

  1. 首先將 broker 的寫權(quán)限關(guān)閉,命令如下:

    bin/mqadmin updateBrokerConfig -b 192.168.x.x:10911 -n 192.168.x.x:9876 -k brokerPermission -v 4
  2. 通過 rocketmq-console 查看該broker的寫入TPS,當(dāng)寫入TPS降為0后,再使用 kill pid 關(guān)閉 rocketmq 進程。溫馨提示:將broker的寫權(quán)限關(guān)閉后,非順序消息不會立馬拒絕,而是需要等客戶端路由信息更新后,不會在往該broker上發(fā)送消息,故這個過程需要等待。

  3. 啟動 rocketmq

    nohup bin/mqbroker -c conf/broker-a.conf  /dev/null  2>&1 &
  4. 恢復(fù)該節(jié)點的寫權(quán)限

    bin/mqadmin updateBrokerConfig -b 192.168.x.x:10911 -n 192.168.x.x:9876 -k brokerPermission -v 6

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI