CPU使用率過高問題定位

1 CPU使用率過高問題定位

1.1 配合使用top+jstack定位(重要)

首先使用top找到CPU使用率最高的進程。

image

接着查看36032進程的線程情況。

top -Hp 36032

image

找到36044線程CPU佔用率最高,然後將線程號轉爲16進制。

# printf %x 36044
8ccc

最後,使用jstack dump 36032進程的日誌到1.txt文件。匹配8ccc之後打印後面30行,從而定位到問題代碼行數。

# jstack 36032 > 1.txt
# cat 1.txt | grep -A 30 8ccc  

image

備註:top定位的線程號是十進制的,而jstack dump出來的是十六進制的。

1.2 使用JMC查看線程情況

利用JFR動態監控出線程情況。

1.3 CPU使用過高的場景

  1. 使用無限循環==>儘量避免
  2. 頻繁GC,GC線程爭用CPU資源==>降低GC頻率
  3. 頻繁創建新對象==>合理使用單例以及線程池
  4. 序列化和反序列化(例如解析操作)==>選用合理的API實現;選用好用的類庫
  5. 不合理地使用正則表達式(正則表達式引擎在進行字符匹配時會發生回溯)==>儘量使正則匹配不回溯。
    1. blog.csdn.net/ityouknow/article/details/80851338
  6. 頻繁的線程上下文切換。==>業務改造,減低頻率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章