最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、分析CPU占用飆高

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

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

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

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

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

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

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

某線程部分屬性說明:

jstack 796 > cpu.txt

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

ProcessExplorer :下載地址:ProcessExplorer

解壓,啟動,長這樣

熟悉的身影,PID為796的Java進程。CPU占用率最高。

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

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

Linux下可以通過命令:

top -p 796 -H

查看線程的CPU占用率。

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

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

二、分析線程死鎖

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

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

程序跑起來,然后請求這個方法。

輸出線程信息到deadLock.txt

jstack 15808 > deadLock.txt

打開deadLock.txt,看到最后面

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

相關(guān)文章

  • java中Lambda常用場景代碼實例

    java中Lambda常用場景代碼實例

    這篇文章主要介紹了java中Lambda常用場景,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java wait和notifyAll實現(xiàn)簡單的阻塞隊列

    Java wait和notifyAll實現(xiàn)簡單的阻塞隊列

    這篇文章主要介紹了Java wait和notifyAll實現(xiàn)簡單的阻塞隊列,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    這篇文章主要介紹了使用redis的increment()方法實現(xiàn)計數(shù)器功能案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 詳解如何在Java中加密和解密zip文件

    詳解如何在Java中加密和解密zip文件

    在本文中,我們來學(xué)習(xí)如何用Zip4j庫創(chuàng)建受密碼保護的壓縮文件并將其解壓,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-09-09
  • Java 日期時間處理詳解(API、格式化)

    Java 日期時間處理詳解(API、格式化)

    在編程中,對日期和時間的處理是一個非常重要的方面,Java提供了豐富的類和工具來處理日期和時間,本文將對Java中的日期時間處理進行詳細介紹,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • java編寫ftp下載工具

    java編寫ftp下載工具

    本文給大家介紹的是如何一步步實現(xiàn)使用java編寫FTP下載工具,而且是在Linux環(huán)境下使用javac編譯的,在運行和編譯上有些不同之處,有需要的小伙伴們參考下吧。
    2015-03-03
  • Java基于深度優(yōu)先遍歷的隨機迷宮生成算法

    Java基于深度優(yōu)先遍歷的隨機迷宮生成算法

    今天小編就為大家分享一篇關(guān)于Java基于深度優(yōu)先遍歷的隨機迷宮生成算法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java實現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel

    Java實現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel

    這篇文章主要為大家詳細介紹一種使用Java的快速將Web中表格轉(zhuǎn)換成Excel的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實現(xiàn)代碼

    String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實現(xiàn)代碼

    這篇文章主要介紹了String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017.2.2版本針對Springboot設(shè)置了一些特性,本篇文章給大家簡單介紹一下如何使用這些特性,需要的朋友參考下吧
    2018-01-01

最新評論

达拉特旗| 枝江市| 汉沽区| 厦门市| 砀山县| 沾化县| 沅江市| 温宿县| 石嘴山市| 潢川县| 西乌珠穆沁旗| 金堂县| 常德市| 东阿县| 南安市| 尼玛县| 财经| 石泉县| 武汉市| 来宾市| 许昌县| 庆安县| 应用必备| 怀来县| 南江县| 浦江县| 屏东市| 遵义市| 宿迁市| 工布江达县| 阿拉善右旗| 琼中| 蓝山县| 天镇县| 阆中市| 惠安县| 泰安市| 房产| 信阳市| 贵州省| 府谷县|