java dump 查看線程運行情況

一、指標(biāo)
通常應(yīng)用服務(wù)性能關(guān)注以下兩方面的指標(biāo):


性能指標(biāo).jpg

下面將主要是基于CPU指標(biāo)進(jìn)行實驗?zāi)M分析,下面是一些命令下,cpu指標(biāo):
1、top 命令下個字段含義,參考:http://www.itdecent.cn/p/078ed7895b0f
2、vmstat 命令:

vmstat-指令.png

us:用戶占用CPU的百分比
sy:系統(tǒng)(內(nèi)核和中斷)占用CPU的百分比
id:CPU空閑的百分比

二、實驗
1、環(huán)境:Linux 2.6.32-696.18.7.el6.x86_64
2、流程:通過Jmeter 對服務(wù)接口進(jìn)行壓測,模擬高并發(fā)訪問,從而使CPU負(fù)載飆升。
3、接口代碼:

public PlainResult<String> test() throws InterruptedException{
        Integer n =0;
        synchronized(locka){
            try{
                for(;;){
                    if(n < Integer.MAX_VALUE){
                        continue;
                    }
                    n++;
                }
            }catch (Exception e){
                log.info("報錯啦");
            }
        }
        return ResultUtils.createSuccessResult("true");
    }

4、JEMET 測試:線程數(shù)=100 ,循環(huán)調(diào)用:


Jemter.jpg

三、分析
此時,用戶已經(jīng)感知服務(wù)非常的慢,作為開發(fā)人員需要定位問題出在哪,以下是基本步驟。
1、首先,我們不知道是哪方面出現(xiàn)了性能問題,因此可以先整體看下服務(wù)的性能,通過vmstat 可以獲?。?/p>

整機性能.png

從上圖可以看出,內(nèi)存、io等無性能瓶頸,但是CPU指標(biāo)us(用戶占用CPU的百分比)非常高,幾乎接近100,id(CPU空閑的百分比)-->0,但是sy不高,另外in(系統(tǒng)中斷)和cs(上下文切換)的數(shù)值非常高,這里可以猜測是用戶應(yīng)用中有大量的線程切換。

2、jps -l 查看有哪些Java進(jìn)程:


Java 進(jìn)程.png

可以看到,服務(wù)器上只有一個應(yīng)用服務(wù),其進(jìn)程pid=24244

3、此時可用top命令可以查看具體信息:


image.png

從上圖中可以看到,進(jìn)程pid=24244一直cpu占用很高,基本可以定位到是該應(yīng)用出現(xiàn)了性能瓶頸問題。

4、jstack -l 24244 > /data/logs/retail-scrm/test/24244.log dump出該進(jìn)程下所有線程的堆棧信息.

5、使用 top -H -p 24244 進(jìn)一步找出高占用CPU的線程:


image.png

從圖中可以看出線程為30654 的一直占用著資源。

6、printf "%x" 30654 輸出對應(yīng)16進(jìn)制的線程號:77be:


image.png

7、進(jìn)入24244.log 找到對應(yīng)線程的堆棧信息:


image.png

可以看到在該方法中,獲取了一個Object對象鎖(private static Object locka = new Object();),而大量的其他線程則被阻塞等待鎖的釋放。


image.png

在找到應(yīng)用中對應(yīng)的代碼,分析其合理性即可。

以上是簡單的模擬線上可能出現(xiàn)的性能問題:主要是通過常用命令查看服務(wù)器相關(guān)指標(biāo),并通過dump進(jìn)程相關(guān)堆棧信息來定位應(yīng)用中可能出現(xiàn)性能問題的節(jié)點。文章有不對之處,誠邀斧正,你的批評是我前進(jìn)的最大動力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容