成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:死鎖的排查工具有哪些?

開發 開發工具
死鎖的排查工具總共有 4 種:jstack、jconsole、jvisualvm、jmc,從易用性和性能方面來考慮,推薦使用 jconsole 或 jvisualvm 來排查死鎖。

死鎖(Dead Lock)指的是兩個或兩個以上的運算單元(進程、線程或協程),都在等待對方釋放資源,但沒有一方提起釋放資源,從而造成了一種阻塞的現象就稱為死鎖。

比如線程 1 擁有了鎖 A 的情況下試圖獲取鎖 B,而線程 2 又在擁有了鎖 B 的情況下試圖獲取鎖 A,這樣雙方就進入相互阻塞等待的情況,如下圖所示:

死鎖的代碼實現如下:

import java.util.concurrent.TimeUnit;

public class DeadLockTest {
public static void main(String[] args) {
Object lockA = new Object();
Object lockB = new Object();
// 創建線程 1
Thread t1 = new Thread(() -> {
// 1.占有鎖 A
synchronized (lockA) {
System.out.println("線程1:獲得鎖A。");
// 休眠 1s(讓線程 2 有時間先占有鎖 B)
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 2.獲取線程 2 的鎖 B
synchronized (lockB) {
System.out.println("線程1:獲得鎖B。");
}
}
});
t1.start();
// 創建線程 2
Thread t2 = new Thread(() -> {
// 1.占有鎖 B
synchronized (lockB) {
System.out.println("線程2:獲得鎖B。");
// 休眠 1s(保證線程 1 能有充足的時間得到鎖 A)
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 2.獲取線程 1 的鎖 A
synchronized (lockA) {
System.out.println("線程2:獲得鎖A。");
}
}
});
t2.start();
}
}

以上程序的執行結果如下圖所示:

從上述結果可以看出,線程 1 和線程 2 都在等待對方釋放鎖,這樣就造成了死鎖問題。哪死鎖應該如何排查呢?

死鎖的排查工具

排查死鎖總共有 4 種工具:

  • jstack
  • jconsole
  • jvisualvm
  • jmc

接下來,我們一一來看。

排查工具 1:jstack

在使用 jstack 之前,先要通過 jps 得到運行程序的進程 ID,使用方法如下:

“jps -l”可以查詢本機所有的 Java 程序,jps(Java Virtual Machine Process Status Tool)是 Java 提供的一個顯示當前所有 Java 進程 pid 的命令,適合在 linux/unix/windows 平臺上簡單查看當前 Java 進程的一些簡單情況,“-l”用于輸出進程 pid 和運行程序完整路徑名(包名和類名)。

有了進程 ID(PID)之后,我們就可以使用“jstack -l PID”來發現死鎖問題了,如下圖所示:

jstack 用于生成 Java 虛擬機當前時刻的線程快照,“-l”表示長列表(long),打印關于鎖的附加信息。

PS:可以使用 jstack -help 查看更多命令使用說明。

排查工具 2:jconsole

使用 jconsole 需要打開 JDK 的 bin 目錄,找到 jconsole 并雙擊打開,如下圖所示:

然后選擇要調試的程序,如下圖所示:

之后點擊連接進入,選擇“不安全的連接”進入監控主頁,如下圖所示:

之后切換到“線程”模塊,點擊“檢測死鎖”按鈕,如下圖所示:

之后稍等片刻就會檢測出死鎖的相關信息,如下圖所示:

排查工具 3:jvisualvm

jvisualvm 也在 JDK 的 bin 目錄中,同樣是雙擊打開:

稍等幾秒之后,jvisualvm 中就會出現本地的所有 Java 程序,如下圖所示:

雙擊選擇要調試的程序:

單擊鼠標進入“線程”模塊,如下圖所示:

從上圖可以看出,當我們切換到線程一欄之后就會直接顯示出死鎖信息,之后點擊“線程 Dump”生成死鎖的詳情信息,如下圖所示:

排查工具 4:jmc

jmc 是 Oracle Java Mission Control 的縮寫,是一個對 Java 程序進行管理、監控、概要分析和故障排查的工具套件。它也是在 JDK 的 bin 目錄中,同樣是雙擊啟動,如下圖所示:

jmc 主頁信息如下:

之后選中要排查的程序,右鍵“啟動 JMX 控制臺”查看此程序的詳細內容,如下圖所示:

然后點擊“線程”,勾中“死鎖檢測”就可以發現死鎖和死鎖的詳情信息,如下圖所示:

總結

死鎖的排查工具總共有 4 種:jstack、jconsole、jvisualvm、jmc,從易用性和性能方面來考慮,推薦使用 jconsole 或 jvisualvm 來排查死鎖。

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-05-11 07:41:55

死鎖運算線程

2023-02-16 08:10:40

死鎖線程

2021-08-24 08:01:15

死鎖工具多線編程

2022-06-06 07:35:26

MySQLInnoDBMyISAM

2022-06-01 12:00:54

HTTP狀態碼服務端

2022-06-07 14:15:44

Vue開發工具

2018-06-27 08:48:48

Linux系統備份

2021-01-04 14:41:28

開發前端工具

2022-10-13 08:02:13

死鎖運算系統

2023-04-09 14:49:57

開發語言Kotlin

2021-03-03 08:57:46

java死鎖線程

2010-04-29 10:22:11

Oracle exp

2022-05-18 13:43:04

Devops應用程序開發

2022-03-23 08:51:21

線程池Java面試題

2022-04-07 07:40:40

線程安全變量

2022-03-14 07:32:06

線程池拒絕策略自定義

2016-08-02 17:00:12

Hadoop大數據系統

2020-03-31 18:47:22

機器學習ML應用程序

2025-02-21 08:11:48

2024-09-26 00:00:10

死鎖阿里面試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜影院 | 国产精品一区二区三区四区五区 | 91极品视频| 高清黄色网址 | 亚洲视频免费在线播放 | 国产精品一区久久久 | 91国内视频在线 | 蜜臀网站 | 求毛片 | 日韩字幕一区 | 综合色久| 亚洲视频在线观看免费 | 伊人狠狠操| 91精品中文字幕一区二区三区 | 成人av色 | 亚洲狠狠| 久久精品欧美一区二区三区不卡 | 国产成人99久久亚洲综合精品 | 国产精品久久久久久久久久久久久 | 精品国产一区二区三区久久久久久 | 国产精品毛片在线 | 久久久av中文字幕 | 亚洲精品乱码久久久久久按摩观 | 91青青草视频 | 欧美成人精品 | 久久国产欧美日韩精品 | 久久精品一区二区三区四区 | 一区二区三区视频免费观看 | 日韩欧美精品一区 | 91社影院在线观看 | 日韩国产黄色片 | 福利精品在线观看 | 免费精品 | 久久国内 | av在线一区二区三区 | 福利国产| 欧美国产精品一区二区 | 欧美精品久久 | 久久国产精品视频 | 青青草原综合久久大伊人精品 | 欧美白人做受xxxx视频 |