性能優化-01(定位問題方式介紹)

1. 利用jdk 命令定位

  •   查看java 進程cpu使用率最高的線程,按shift + p 按照cpu 排序,shift +m 按照內存排序
top -Hp 8515
  • 把線程ID轉爲16進制,假設進程 23549 cpu使用率最高
printf "%x\n" 23549
5bfd
  • 查看堆棧信息
jstack 23496 |grep 5bfd -A 30

2. arthas 定位JVM 問題、

  • arthas介紹

Arthas 是 Alibaba 在 2018 年 9 月開源的 Java 診斷工具。支持 JDK6+, 採用命令行交互模式,提供 Tab 自動不全,可以方便的定位和診斷線上程序運行問題。截至本篇文章編寫時,已經收穫 Star 17000+。

Arthas 官方文檔十分詳細,本文也參考了官方文檔內容,同時在開源在的 Github 的項目裏的 Issues 裏不僅有問題反饋,更有大量的使用案例,也可以進行學習參考。

  • arthas 應用場景

得益於 Arthas 強大且豐富的功能,讓 Arthas 能做的事情超乎想象。下面僅僅列舉幾項常見的使用情況,更多的使用場景可以在熟悉了 Arthas 之後自行探索。是否有一個全局視角來查看系統的運行狀況?爲什麼 CPU 又升高了,到底是哪裏佔用了 CPU ?運行的多線程有死鎖嗎?有阻塞嗎?程序運行耗時很長,是哪裏耗時比較長呢?如何監測呢?這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?有什麼辦法可以監控到 JVM 的實時運行狀態?

  • 安裝運行
# github下載
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下載
wget https://arthas.gitee.io/arthas-boot.jar
# 打印幫助信息
java -jar arthas-boot.jar -h

# 運行方式
sh as.sh
#或者
java -jar arthas-boot.jar
  • 常用命令介紹

  • 官方文檔

開源地址:https://github.com/alibaba/arthas

官方文檔:https://alibaba.github.io/arthas

3. 分享一個開源小工具定位

  • shell腳本下載地址:
wget --no-check-certificate https://github.com/oldratlee/useful-scripts/archive/release-2.x.zip
unzip release-2.x.zip
  • 使用方式,進入bin目錄下執行
 ./show-busy-java-threads 
  • 常用命令如下

#從所有JAVA線程找出最消耗CPU的線程,默認5個

show-busy-java-threads.sh

show-busy-java-threads.sh -c <要顯示的線程棧數>

show-busy-java-threads.sh -c <要顯示的線程棧數> -p <指定的JAVA process>

show-busy-java-threads.sh -a <輸出記錄到文件>

show-busy-java-threads.sh -t <重複執行的次數> -i <重複執行的間隔秒數>

 

 

 

 

 

 

 

 

 

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