面試官問:如何排除GC引發的CPU飆高?我脫口而出5個步驟

關注「Java後端技術全棧」java

回覆「000」獲取大量電子書面試

在工做中,當一個系統發生OOM的時候,這種問題可能會讓你們很煩惱困惑,由於故障排查起來是一個綜合技術的考量。在平時工做中要增長本身的知識廣度,多學習,多總結,多思考,多作筆記,這纔是真正的王道。後端

尤爲是在線上環境中,如何分析是哪一個線程致使的CPU飆高的問題,一般大體有幾個差很少固定的步驟。這個問題也是面試頻率很是之高的問題之一,不少人也是靠回答這個問題而加薪。架構

常見套路步驟:less

使用top命令

使用top -H pid分佈式

使用prinf %x tid微服務

使用jsack pid >pid.log工具

查閱less pid.log學習

下面就來講一下這幾個步驟。spa

top

咱們可使用top命令來查找對應使用CPU最多的進程,找到後,先記錄下對應的pid(後面要用到)。

再使用Shift+P這兩個快捷鍵能夠按CPU的使用率進行排序。

top-H pid

再次使用top名,可是此次增長一個參數-H,能夠查看上面找出來的pid進程中對應的線程tid,記住這時候的線程tid得記住

printf

可是此時的tid是十進制的,咱們須要把這個tid轉成16進制。而後使用

printf %x tid

stack

使用jstack工具把線程信息輸出到對應的日誌文件中,後面使用這個日誌文件內容進行分析。

jstack pid >pid.log

less

上面已經生成日誌文件了,這時候可使用less命令來查找上面已經轉換好的16進制的線程tid。

less pid.log

其它

另外還可使用

jstat -gcutil pid 1000 10

來查看垃圾回收的實時狀況。

關於jstat的使用前參考前面的文章 工具

推薦一篇很全的線上CPU飆高的解決文章

http://woaijava.cc/blog/20111...

推薦閱讀:

《Spring Cloud與Docker微服務架構實戰》.pdf

《Go語言實戰》.pdf

《分佈式Java應用基礎與實踐》.pdf

相關文章
相關標籤/搜索