java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单
目錄:
一、Arthas 介紹
二、Arthas 使用場景
三、Arthas怎么使用
四、Arthas 定位性能問題
定位Java代碼導(dǎo)致占用CPU高的問題
線程死鎖
前言:
在做性能測試的過程中,當(dāng)遇到Java性能問題,比如CPU飆升,負(fù)載突高,內(nèi)存溢出等問題,需要一個(gè)個(gè)命令輸入,比如jstack,jmap,top。最終才能一步步定位到問題,有時(shí)還不能定位到問題,而通過arthas可以很快的定位到問題
一、Arthas 介紹
Arthas 是 Alibaba 在 2018 年 9 月開源的 Java 診斷工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自動不全,可以方便的定位和診斷線上程序運(yùn)行問題。
Arthas 官方文檔十分詳細(xì),本文也參考了官方文檔內(nèi)容,同時(shí)在開源在的 GitHub 的項(xiàng)目里的 Issues 里不僅有問題反饋,更有大量的使用案例,也可以進(jìn)行學(xué)習(xí)參考。
二、Arthas 使用場景
主要的場景如下:
1、是否需要一個(gè)全局視角來查看系統(tǒng)的運(yùn)行狀況?
2、系統(tǒng) CPU 升高了,到底是哪里占用了 CPU?
3、運(yùn)行的多線程有死鎖嗎?有阻塞嗎?
4、有什么方法可以監(jiān)控到 JVM 的實(shí)時(shí)運(yùn)行狀態(tài)?
三、Arthas 怎么使用
1、安裝
可以在官方 GitHub 上進(jìn)行下載,也可以在國內(nèi)的碼云 Gitee 下載。
GitHub 下載
或者 Gitee 下載
打印幫助信息
Java -jar arthas-boot.jar -h
2、運(yùn)行
從上面下載的 jar 包來看,可以直接用 Java -jar 命令運(yùn)行
運(yùn)行方式有如下兩種:
方式 1:先運(yùn)行,再選擇 Java 進(jìn)程 pid
[root@localhost data]# Java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.3.3
[INFO] Found existing Java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
[1]: 15585 arthas-boot.jar
[2]: 18095 org.apache.catalina.startup.Bootstrap
輸入[]里面的數(shù)字,回車
另外一種方式,運(yùn)行時(shí)選擇 Java 進(jìn)程 pid:
備注:查看運(yùn)行的 Java 進(jìn)程信息
[root@localhost ~]# Java -jar arthas-boot.jar 18095
看到如下信息,就說明啟動成功了
3、常用命令
4、退出
[arthas@18888]$ shutdown
四、Arthas 定位性能問題
1、全局監(jiān)控
使用 dashboard?可以實(shí)時(shí)顯示線程,內(nèi)存,GC,運(yùn)行環(huán)境信息
2、定位 Java 代碼導(dǎo)致占用 CPU 高的問題
在 jmeter 里面跑性能測試場景,在聚合報(bào)告里面,可以看到響應(yīng)時(shí)間越來越高
查看系統(tǒng)資源使用情況,輸入:top
可以看到 cup 占用已經(jīng) 99% 以上了
在 arthas 里面輸入如下命令,查看 CPU 使用率 TOP N 的線程
[arthas@18888]$ thread -n 5
備注:這里有一個(gè)問題,當(dāng)用 jmeter 發(fā)起請求的時(shí)候,線程會啟動很多,輸入 dashboard?或 thread,不會查看到單個(gè) CPU 占用很高,只能用這種 thread -n N 的方式,顯示線程棧的執(zhí)行情況
這些代碼導(dǎo)致的性能問題:
3、線程死鎖
可以從 dashboard 的輸出中,看到有 BLOCKED 狀態(tài)的線程
再輸入如下命令:thread 線程 id
或者直接輸入:
[arthas@20917]$ thread -b
總結(jié)
以上是生活随笔為你收集整理的java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java容器类继承_JAVA容器 -
- 下一篇: Javolution 2.2.5 - J