關注「Java後端技術全棧」java
回覆「000」獲取大量電子書面試
在工做中,當一個系統發生OOM
的時候,這種問題可能會讓你們很煩惱困惑,由於故障排查起來是一個綜合技術的考量。在平時工做中要增長本身的知識廣度,多學習,多總結,多思考,多作筆記,這纔是真正的王道。後端
尤爲是在線上環境中,如何分析是哪一個線程致使的CPU飆高的問題,一般大體有幾個差很少固定的步驟。這個問題也是面試頻率很是之高的問題之一,不少人也是靠回答這個問題而加薪。架構
常見套路步驟:less
使用top命令使用
top -H pid
分佈式使用
prinf %x tid
微服務使用
jsack pid >pid.log
工具查閱
less pid.log
學習
下面就來講一下這幾個步驟。spa
咱們可使用top命令來查找對應使用CPU最多的進程,找到後,先記錄下對應的pid(後面要用到)。
再使用Shift+P這兩個快捷鍵能夠按CPU的使用率進行排序。
再次使用top名,可是此次增長一個參數-H,能夠查看上面找出來的pid進程中對應的線程tid,記住這時候的線程tid得記住
可是此時的tid是十進制的,咱們須要把這個tid轉成16進制。而後使用
printf %x tid
使用jstack工具把線程信息輸出到對應的日誌文件中,後面使用這個日誌文件內容進行分析。
jstack pid >pid.log
上面已經生成日誌文件了,這時候可使用less命令來查找上面已經轉換好的16進制的線程tid。
less pid.log
另外還可使用
jstat -gcutil pid 1000 10
來查看垃圾回收的實時狀況。
關於jstat的使用前參考前面的文章 工具。
推薦一篇很全的線上CPU飆高的解決文章
http://woaijava.cc/blog/20111...
推薦閱讀: