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

利用JStack排查死鎖問題和CPU100%問題

 更新時間:2023年12月26日 10:28:15   作者:日上三桿快起床  
無論是再面試過程中還是再實際項目開發(fā)當中我們都有可能遇到這兩個問題如何利用JStack排查死鎖問題和CPU100%問題,文中給出了詳細的排查過程和解決方法,需要的朋友可以參考下

1、工具JStack是什么?

JStack可以顯示Java應(yīng)用程序中每個線程的堆棧跟蹤,幫助開發(fā)人員診斷線程相關(guān)的問題,比如死鎖和性能問題。通過使用JStack,開發(fā)人員可以查看線程的狀態(tài)、鎖定信息以及線程調(diào)用堆棧,從而更好地理解應(yīng)用程序的運行狀況。

1.1命令介紹:

  • jstack [-l] <pid>:這個命令會生成指定Java進程的線程轉(zhuǎn)儲。-l選項會同時顯示關(guān)于鎖的附  加信息。
  • jstack -F [-m] [-l] <pid>:這個命令會在Java進程響應(yīng)時生成線程轉(zhuǎn)儲。-m選項會同時顯示Java和本地堆棧信息。
  • jstack -m [-l] <pid>:這個命令會同時顯示Java和本地堆棧信息。
  • jstack -h:這個命令會顯示幫助信息,列出所有可用的選項。

再其中有兩個名詞java堆棧、本地堆棧,可能有些不太理解:

  • Java堆棧信息:顯示了每個線程在Java虛擬機中的調(diào)用堆棧。這些信息包括了線程當前執(zhí)行的方法、類名等。
  • 本地堆棧信息:顯示了每個線程在本地方法中的調(diào)用堆棧。本地方法是使用本地語言(如C或C++)編寫的方法,通常用于與操作系統(tǒng)或硬件交互。

2、解決死鎖問題

解決死鎖問題我們最先就要定位到哪里發(fā)生了死鎖。我先準備一段一定發(fā)生死鎖的程序,然后讓他再服務(wù)器運行,然后我們來利用工具JStack來定位死鎖。

public class Demo {
 static Lock lock1 = new ReentrantLock();
 static Lock lock2 = new ReentrantLock();
 public static void deathLock() {
            Thread t1 = new Thread() {
                @Override
                public void run() {
                    try {
                        lock1.lock();
                        System.out.println(Thread.currentThread().getName() + " get the lock1");
                        Thread.sleep(1000);
                        lock2.lock();
                        System.out.println(Thread.currentThread().getName() + " get the lock2");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread t2 = new Thread() {
                @Override
                public void run() {
                    try {
                        lock2.lock();
                        System.out.println(Thread.currentThread().getName() + " get the lock2");
                        Thread.sleep(1000);
                        lock1.lock();
                        System.out.println(Thread.currentThread().getName() + " get the lock1");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            //設(shè)置線程名字,方便分析堆棧信息
            t1.setName("mythread-jay");
            t2.setName("mythread-tianluo");
            t1.start();
            t2.start();
        }
public static void main(String[] args) {
 
        deathLock();
    }
}

再代碼中線程“mythread-jay”持有鎖lock1等待lock2,"mythread-tianluo"線程持有l(wèi)ock2等待lock1 。那么這兩個線程就會嘗試死鎖?;ハ嗟却?。

此時我們通過jps命令查看這個進程的進程號:

那么此時我們得知了進程號就可以 使用JStack工具了。

那么我們就得到了一大串的字符描述進程執(zhí)行情況,那么我們?nèi)フ谊P(guān)于這兩個線程的信息,由下面兩張圖我們可以看出兩個線程都處于Wait狀態(tài),造成了死鎖的情況,這個工具原原本本的給我們展示出來了,那我們也就知道了原因,就可以著手解決了:

3、解決CPU100%問題

造成CPU100%問題的原因有很多種,無限循環(huán)、過多的線程、大量的計算等都有可能,那么我們這次通過無限循環(huán)來達到CPU100%效果。

那么我們看到CPU百分百,我們可以使用top命令查看哪個進程占用CPU過高。

top,   我們看到進程號為10413的java進程CPU利用率高達96.7%

那么得知是這個進程出的問題,那么我們就進一步深入的去看是這個進程中哪些線程導(dǎo)致的問題了。 使用命令top -Hp <PID>,一看是線程號為10548的線程搞得鬼,那么我們就可以使用JStack工具對這個線程進行檢查了。

使用 jstack 10548 命令, 得到這個線程的信息,我們可以觀察得到這個線程是為數(shù)不多處于RUNNABLE狀態(tài)的線程,他正在執(zhí)行Demo1Applocation類的第27行,那么這個第27行也正是無限循環(huán)所在。那么這個罪魁禍首也找到了。

以上就是利用JStack排查死鎖問題和CPU100%問題的詳細內(nèi)容,更多關(guān)于JStack排查死鎖和CPU100%的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Java生成帶有文字的二維碼

    利用Java生成帶有文字的二維碼

    二維碼在我們現(xiàn)在的生活中可謂是隨處可見,這篇文章主要是介紹如何利用Java生成帶有文字的二維碼,對大家學習Java具有一定的參考借鑒價值。有需要的朋友們下面來一起看看吧。
    2016-09-09
  • Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    通過Java程序展示如何來實現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • Java動態(tài)代理的兩種實現(xiàn)方式詳解【附相關(guān)jar文件下載】

    Java動態(tài)代理的兩種實現(xiàn)方式詳解【附相關(guān)jar文件下載】

    這篇文章主要介紹了Java動態(tài)代理的兩種實現(xiàn)方式,結(jié)合實例形式分析了java動態(tài)代理的相關(guān)原理、實現(xiàn)方法與操作技巧,并附帶相關(guān)jar文件供讀者下載,需要的朋友可以參考下
    2019-03-03
  • 詳解Java中l(wèi)og4j.properties配置與加載應(yīng)用

    詳解Java中l(wèi)og4j.properties配置與加載應(yīng)用

    這篇文章主要介紹了 log4j.properties配置與加載應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • MyBatis-Plus忽略多租戶隔離自定義注解

    MyBatis-Plus忽略多租戶隔離自定義注解

    本文主要介紹了MyBatis-Plus忽略多租戶隔離自定義注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Eclipse項目出現(xiàn)紅色嘆號的解決方法

    Eclipse項目出現(xiàn)紅色嘆號的解決方法

    eclipse工程前面出現(xiàn)紅色嘆號都是由于eclipse項目、eclipse工程中,缺少了一些jar包等文件引起的,這篇文章主要給大家介紹了關(guān)于Eclipse項目出現(xiàn)紅色嘆號的解決方法,需要的朋友可以參考下
    2023-11-11
  • java中接口冪等性的五種實現(xiàn)方法

    java中接口冪等性的五種實現(xiàn)方法

    在java中保證接口冪等性,即多次調(diào)用同一接口產(chǎn)生與單次調(diào)用相同的結(jié)果,不會引發(fā)副作用,需要結(jié)合業(yè)務(wù)場景選擇合適的方案,下面就來介紹五種實現(xiàn)方法,感興趣的可以了解一下
    2025-09-09
  • SpringBoot2.6.13+Java8跨域配置實踐

    SpringBoot2.6.13+Java8跨域配置實踐

    文章介紹了三種跨域配置方案,并對比了它們的優(yōu)缺點,方案一和方案二適用于開發(fā)環(huán)境,方案三適用于生產(chǎn)環(huán)境,如果使用SpringSecurity,推薦使用方案二,如果需要攜帶憑證,將allowCredentials設(shè)置為true
    2026-03-03
  • Spring中IoC優(yōu)點與缺點解析

    Spring中IoC優(yōu)點與缺點解析

    這篇文章主要為大家詳細解析了Spring中IoC優(yōu)點與缺點,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringMVC攔截器超詳細解讀

    SpringMVC攔截器超詳細解讀

    SpringMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于對處理器進行預(yù)處理和后處理。?依賴于web框架,在實現(xiàn)上基于Java的反射機制,屬于面向切面編程(AOP)的一種運用
    2022-07-07

最新評論

福州市| 长沙市| 平陆县| 宾阳县| 正阳县| 蒙阴县| 内黄县| 衢州市| 红河县| 五大连池市| 阳春市| 西盟| 互助| 松阳县| 建始县| 德保县| 宜君县| 宁国市| 象州县| 诸城市| 湘乡市| 南雄市| 济宁市| 沙洋县| 交口县| 平塘县| 阳东县| 延吉市| 石泉县| 成都市| 甘德县| 巫溪县| 页游| 义乌市| 云南省| 广丰县| 汪清县| 彝良县| 磐石市| 确山县| 东源县|