成人免费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

開發前端工具

2023-04-09 14:49:57

開發語言Kotlin

2022-10-13 08:02:13

死鎖運算系統

2021-03-03 08:57:46

java死鎖線程

2022-05-18 13:43:04

Devops應用程序開發

2010-04-29 10:22:11

Oracle exp

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技術棧公眾號

主站蜘蛛池模板: 在线一区 | 久久精品久久久久久 | 日韩精品999 | 青青草一区 | 日韩在线免费视频 | 国产亚洲精品综合一区 | 国产二区视频 | 久久精品国产免费 | 久久这里有精品 | 亚洲一区视频在线 | 日韩一区二区三区四区五区 | 在线免费亚洲视频 | 狠狠色综合欧美激情 | 亚洲视频 欧美视频 | 天堂中文资源在线 | 亚洲一区中文字幕在线观看 | 国产乱码精品一区二区三区五月婷 | 亚洲视频观看 | 久久激情网| 久久国产精品视频 | 欧美一区二区三区的 | 亚洲精品免费在线 | 日韩三区在线观看 | 最新国产在线 | 日韩欧美亚洲一区 | 精品成人av | 成人av播放 | 亚洲精品久久久久久一区二区 | 91观看| 日韩精品一区二区三区视频播放 | gogo肉体亚洲高清在线视 | 久草新视频 | 日韩精品一区二区三区免费观看 | 久久九精品 | 亚洲视频一区二区三区四区 | 亚洲欧美日韩精品久久亚洲区 | 男女免费视频网站 | 欧美一区二区三区在线观看 | 美女天堂 | 成人啊啊啊 | 欧美一区二区三区在线观看视频 |