亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JVM---jstack分析Java線程CPU占用,線程死鎖的解決

 更新時(shí)間:2020年09月17日 08:59:13   作者:Mistra丶  
這篇文章主要介紹了JVM---jstack分析Java線程CPU占用,線程死鎖的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

本文章主要演示在Windows環(huán)境,Linux環(huán)境也差不多。

一、分析CPU占用飆高

首先寫一個(gè)Java程序,并模擬一個(gè)死循環(huán)。讓CPU使用率飆高。CPU負(fù)載過大的話,新的請求就處理不了了,這就是很多程序變慢了甚至不能訪問的原因之一。

下面是我這里的Controller,啟動程序之后,開多個(gè)請求訪問這個(gè)方法。死循環(huán)代碼就不貼了,自己構(gòu)造。我這里模擬的一個(gè)截取字符串的死循環(huán)。

/**
 * 演示死循環(huán)導(dǎo)致cpu使用率飆高
 * */
 @RequestMapping("/loop")
 public List<Long> loop(){
 return getPartneridsFromJson();
 }

啟動程序,查看線程id,我這里是 796

開多個(gè)請求訪問Controller方法,可以在任務(wù)管理器看到CPU不斷增高。我開了7個(gè)窗口請求。Linux下可以通過 top命令查看CPU占用率。

現(xiàn)在發(fā)生了問題,開始定位問題。問題是我們手動構(gòu)造的,實(shí)際生產(chǎn)環(huán)境肯定比這個(gè)復(fù)雜的多。

先把Java線程信息輸出到指定文件,我這里就輸出到桌面的cpu.txt文件中,如下

某線程部分屬性說明:

jstack 796 > cpu.txt

Windows下要借助一個(gè)工具,查看系統(tǒng)進(jìn)程以及線程的詳細(xì)信息:

ProcessExplorer :下載地址:ProcessExplorer

解壓,啟動,長這樣

熟悉的身影,PID為796的Java進(jìn)程。CPU占用率最高。

在java.exe上右鍵選擇Properties,在彈出的窗口選擇Thread信息

可以看到7個(gè)CPU占用異常高的線程。這里的TID就是線程ID,不過是10進(jìn)制的。剛剛我們jstack導(dǎo)出來的cpu.txt文件中的線程id是16進(jìn)制的。

Linux下可以通過命令:

top -p 796 -H

查看線程的CPU占用率。

隨便看一個(gè),13812轉(zhuǎn)換成16進(jìn)制為:35f4,我們在cpu.txt搜一下這個(gè)線程

**可以發(fā)現(xiàn),這個(gè)線程是運(yùn)行中的狀態(tài),在執(zhí)行indexOf方法。是JVMTuningController.getPartneridsFromJson這個(gè)方法。**這樣就能定位到發(fā)生問題的位置了。實(shí)際生產(chǎn)情況要比這個(gè)復(fù)雜的多。就要慢慢分析了

二、分析線程死鎖

先構(gòu)造一個(gè)死鎖方法,網(wǎng)上一搜一大把,我就不貼了。這是我的controller代碼

/**
* 演示死鎖 導(dǎo)致cpu使用率飆高
* */
@RequestMapping("/deadlock")
public String deadlock(){
 deadLock();
}

程序跑起來,然后請求這個(gè)方法。

輸出線程信息到deadLock.txt

jstack 15808 > deadLock.txt

打開deadLock.txt,看到最后面

以上這篇JVM---jstack分析Java線程CPU占用,線程死鎖的解決就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論