jstack解決線上發佈失敗問題記錄

jstack解決線上問題記錄

問題現象

之前也有看過jstack的文章,典型的案例是deadLock和空閒線程調優。不過都不是這次遇到的問題。

這次的問題現象是容器發佈時,tomcat輸出的日誌就卡在某行日誌,需要大約半小時的時間才繼續輸出日誌並且啓動成功。啓動成功後也沒有明顯的錯誤日誌。

解決步驟

首先猜想是某個線程卡住了,一般來說是網絡資源連接。果斷使用jstack進行導出日誌。

接着進行分析,可以直接取看文件內容,也可以通過線上或者idea的Analyze Stack Trace or Thread Dump功能進行分析。

本次使用的是idea的方式。
在這裏插入圖片描述

這裏怎麼去找block的線程呢?

個人覺得有兩種辦法:

  1. 去找tomcat相關線程block的堆棧,與外部線程有關的一般就是。
  2. 理解tomcat的模型後,知道catalina會啓動多個host,所以localhost的waiting肯定會造成catalina的waiting。從host -> catalinade -> main的關係進行查看,查看懷疑的線程。

從堆棧中可以明顯看到是elsatic search的init造成了block。然後通過加日誌的方式證明的確是這部分代碼影響的。原來是elastic search的外部環境變化,某些節點不可用導致的。調整配置後解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章