一次resin服務器故障排查,以及jstack初步了解


  不知道為什么,窗外出現了烏雲,又不知道為什么,煩人的蟬鳴突然變得無聲了,大腦中的嘈雜瞬間歸位了寧靜,草他么,我的測試服務器又特么無緣無故的崩了。

  作為菜鳥為了排查故障,最先想到的就是找日志,先后分析了項目啟動日志,resin啟動日志,jvm日志完全看不出來結果。

    1.jvm日志顯示gc正常,內存沒有溢出。

      

    2.resin進程在,啟動日志也沒有報錯。

    3.項目日志有條警告,log4j和另外一個log包有類沖突,一般警告都是無視的,為了安全刪掉了無用的log包,重啟resin服務依舊不可用,請求也打不進來。

  日志分析沒有結果,代碼重新編譯重部服務器依舊沒有響應,束手無策。只好去跪舔大神求助。

  同事看了日志之后發現一個問題,resin並沒有真正的起來。

    當時resin的stdout.log是這樣的:

      

    正常啟動的時候應該會多打一句log如下:

      [20:28:53.406] Resin started in 336646ms

    說明resin在啟動的時候因為某種原因阻塞掉了。於是就用了jstack來分析線程當時的情況。

      jstack 572781 > tmp

      

    上圖是resin的主線程,在幾個時刻使用jstack查看主線程的狀態始終如此,說明主線程在這個方法上阻塞了。

    稍微看了一下主線程的堆棧,原因肯定是涉及到ip和zookeeper,我才會回想起來,最近公司因為業務縮減,機房整理,以前的zk服務進行了遷移,

    果然我找到項目中zk配置ping了一下原ip ping不通,之后把項目中zk配置改為了域名訪問,在hosts中設置了一個ip之后就ok了。

  經歷過此次服務器宕機,學會了使用jstack來查找進程阻塞的原因,以及對java的線程轉儲有了進一步的了解。

  還有個問題就是以前resin重部一次僅需要24s左右,如今需要3min,不知道是不是依然是zk配置的問題,有待進一步調查。

 


 

華麗的分割線:

  jstack使用:

  java線程轉儲:

 


免責聲明!

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



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