某客戶系統weblogic主備模式異常重啟事件

jaymarco發表於2020-09-22

今天給大家帶了了一篇weblogic中介軟體故障事件經歷,那是在某年某月某日某時某分,突然電話響了瞄了一眼,看見那熟悉的號碼,感覺不好會有緊急事件要發生了。是現場一線運維同事打過來的,最近幾天系統的weblogic總是異常罷工總是反覆重啟。需要緊急去現場解決問題。


    筆者以最快的速度叫了一輛車來到了現場,看見現場的兄弟們很無賴表情的看著我,專家,你總算來了。筆者一邊聽現場兄弟描述故障現象,一邊開電腦準備連線現場環境。總算了解清楚現場情況,現在開始幹活了。先登入weblogic控制檯檢查服務正常,但從日誌中發現weblogic服務在半分鐘後就自動重啟成功。但如果頻繁發生類似問題勢必會給業務帶來不良影響


現場環境是一套Weblogic10.0 MP1 HA架構,weblogic與DB都在同一臺主機,一旦主機發生異常就會透過HA軟體進行主備切換,接著HA軟體就會自動拉起DB資料庫和weblogic應用。而HA的自檢機制是每隔1-2分鐘去呼叫一次weblogic_auto.sh指令碼來檢查weblogic服務執行狀態,一旦檢查到weblogic其中一個程式服務失敗就返回給HA的值是非0,指令碼會有一次自動重啟weblogic服務機會。如果這一次自動重啟失敗後,那就沒有機會了,HA就會自動切換到備機。如下圖是自檢指令碼操作流程:


從上面操作流程來看是沒有什麼問題,切入點回到日誌中去排查

在故障時間點獲取了domain中weblogic服務日誌都有發現重啟的跡象,現挑出其中一套環境的weblogic日誌和weblogic自檢啟動指令碼日誌,針對這兩個日誌做出詳細分析:

1)、我們在故障時間點2020-1-9 下午03時30分09秒,發現weblogic服務日誌中有報錯java.lang.OutOfMemoryError: unable to create new native thread,此錯會導致執行緒無資源建立,會讓weblogic服務hang,系統訪問會變緩慢。這並不是導致weblogic服務致命問題。此刻weblogic服務已經異常了。

2)、在故障時間點2020-1-9 下午03時30分03秒,從weblogic自檢日誌中有發現HA程式呼叫weblogic_auto.sh status去自檢weblogic的服務執行狀態,但檢查的過程中無法正常獲取weblogic服務狀態,也報了java.lang.OutOfMemoryError: unable to create new native thread。這個肯定不是巧合,發現指令執行失敗返回來的值是不正常的,因此判定weblogic狀態是異常。最終weblogic自檢指令碼發起weblogic服務重啟指令,來重啟weblogic服務,這才是問題的原因導致。

3)、在故障時間點2020-1-9 下午03時31分43秒,weblogic服務開始啟動,最後在2020-1-9 下午03時32分10秒左右,weblogic服務啟動成功。


最終總結透過上面的資料證據表明此次weblogic自動重啟事件原因是java.lang.OutOfMemoryError: unable to create new native thread因記憶體溢位資源不足導致新執行緒沒有資源可分配。HA程式會每隔1-2分鐘去呼叫weblogic_auto.sh來檢查weblogic服務執行狀態,指令碼在獲取狀態異常報錯(OutOfMemoryError),最後返回給HA是非0值,自檢指令碼會自動重啟weblogic這個服務程式。所以排除作業系統kill weblogic服務程式。


針對此次事件總結最佳化建議如下:

1、建議調大JVM記憶體空間,基礎上擴容1倍。

2、將當前HA架構改造成weblogic cluster模式,提升資源利用率,保障系統高可用。

3、在JVM虛擬機器中增加記憶體溢位引數和增加的GC引數,有利於系統出現記憶體溢位方便記憶體故障排查問題分析。


有需要的朋友可以關注我的公眾號,文章每日一更



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723059/,如需轉載,請註明出處,否則將追究法律責任。

相關文章