代碼邏輯死循環導致線上CPU飆升問題排查

背景

今天下午出現告警提示線上環境機器的CPU突增到100%,持續約兩分鐘又回落到正常水平。

結論

文件導出時由於邏輯漏洞導致部分場景,填充excel時出現死循環,當數據填充到一定量時,就會拋異常而後捕捉到,跳出循環。

一般場景分析

一般來說,CPU高有以下幾種常見原因:

業務請求和處理的併發量大,並且業務中包含較大的運算量;
業務代碼存在Bug,出現了過多的冗餘計算或者死循環;
由於可用內存空間不足(包括分配太小,內存沒有合理釋放導致的泄露),導致頻繁進行垃圾回收造成的高CPU;

排查流程

出現問題時,注意是問題發生的時候,問題已經不存在了,現場已經被破壞了,如機器重啓,如異常消失等,都無法通過一下方式探析,因爲這類問題屬於實時問題範疇。

1.使用top命令查看使用CPU過高的進程
top
2.使用 top -H -p [pid]查看使用CPU過高的線程
top -H -p 1113
3.使用jstack -l [pid]查看jvm當前的線程信息
jstack -l 1113
輸出日誌中,重點關注nid 的值,可以看到是16進制的,把之前使用 top -H -p 1113獲取到的線程id轉成16進制(比如上面的1114對應16進制45a),用這個值過濾 jstack -l 1113 | grep 45a
這樣就能定位到有問題的線程了。

  

上述流程不可用,我們可以藉助gc.log來分析

1.運行sz filename,會將文件下載到windows本地

2.可以使用https://gceasy.io/,用來分析gc日誌,幫助我們判斷問題。

排查概要

發現告警時,CPU水平已經回落了,因爲CPU飆升問題的排查具有實時性的特點,藉助gc.log去進行分析。

 

本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支持。

首發鏈接:https://www.cnblogs.com/lingyejun/p/18052954

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