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

Java七武器系列霸王槍 -- 線程狀態(tài)分析jstack

開發(fā) 開發(fā)工具
在應(yīng)用運(yùn)行過程中,除了遇到 Bug,正常情況兩秒鐘返回了,這次一分鐘還沒返回。這個(gè)時(shí)候,關(guān)注應(yīng)用內(nèi)的話,就需要分析一下其線程執(zhí)行情況,來了解了定位具體問題。

在應(yīng)用運(yùn)行過程中,除了遇到 Bug,執(zhí)行結(jié)果不符合我們的預(yù)期之外,還有些時(shí)候是應(yīng)用的響應(yīng)問題。

比如同樣對(duì)于頁(yè)面的請(qǐng)求,正常情況下兩秒之內(nèi)就返回了結(jié)果,頁(yè)面已經(jīng)渲染完成展現(xiàn)出來了。

那不正常的時(shí)候,就會(huì)看到頁(yè)面請(qǐng)求在不斷的加載中,沒有拿到響應(yīng)。當(dāng)然這個(gè)時(shí)候可以分析的點(diǎn)有很多:

  • 可能操作系統(tǒng)的CPU、內(nèi)存等資源占用比較多;
  • 也有可能是應(yīng)用內(nèi)線程較多在等待;
  • 還有可能是涉及到讀數(shù)據(jù)庫(kù)等操作時(shí)遇到鎖之類的問題。

這次先不理會(huì)操作系統(tǒng)層面上的東西,只來分析應(yīng)用內(nèi)可能遇到的情況。

回到前面說的問題,正常情況兩秒鐘返回了,這次一分鐘還沒返回。這個(gè)時(shí)候,關(guān)注應(yīng)用內(nèi)的話,就需要分析一下其線程執(zhí)行情況,來了解了定位具體問題。

此時(shí),這次要提到的這個(gè)「武器」jstack 可以快速定位,直達(dá)患處。

是什么

 jstac 是什么? 這個(gè)是 Oracle JDK 默認(rèn)包含的一個(gè)用于打印執(zhí)行 Java 進(jìn)程的當(dāng)前線程棧信息的工具。官方是這樣介紹的:

jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server. For each Java frame, the full class name, method name, 'bci' (byte code index) and line number, if available, are printed.

注意其中幾個(gè)關(guān)鍵點(diǎn):每一個(gè) Java Frame 的全類名,方法名,如果能拿到行號(hào)的話還會(huì)顯示行號(hào)。看過前面介紹調(diào)試技巧那篇文章(80%的程序員都不了解的調(diào)試技巧)的朋友可能還記得,其中有一個(gè)功能是Drop Frame, 來實(shí)現(xiàn)后退執(zhí)行。和這里的是一個(gè)地方,都對(duì)應(yīng)線程中的一級(jí)調(diào)用。

使用 jstack 打出來的信息,和一般應(yīng)用遇到異常時(shí)的printStackTrace 基本一樣,只是那只是一個(gè)線程調(diào)用鏈的,這里通過工具,可以把應(yīng)用內(nèi)所有線程都打出來。

用法

使用方式和一般的 Java 分析工具類似,都是通過

命令名 <可選參數(shù)> + pid(進(jìn)程id)

這種格式使用。比如對(duì)于 jstack, 一般可以直接 jstack 應(yīng)用pid 即可。這里 pid 可以通過Java的 jps 工具獲取,也可以通過 Linux 下的ps 工具和 Windows 下的任務(wù)管理器獲取。

輸出

我們以一個(gè)Tomcat進(jìn)程為例,輸出類似這樣:


 

Tomcat進(jìn)程的輸出

我們看上面的幾個(gè)框:

最上方左側(cè),是當(dāng)前線程的線程名稱,可以根據(jù)此來在應(yīng)用內(nèi)大量的線程中找到我們關(guān)心的線程正在執(zhí)行的操作。例如 Tomcat 一般 http-port -x 這種線程是請(qǐng)求的處理線程,頁(yè)面響應(yīng)慢的時(shí)候,可以直接找這一類線程。

隨著請(qǐng)求的增多,線程數(shù)也會(huì)很多。所以一般多線程應(yīng)用開發(fā),一個(gè)好的實(shí)戰(zhàn)建議是為創(chuàng)建的線程起一個(gè)有意義的名字,否則打出來的 stack 里大量的 thread -1, thread -2 這種,天曉得哪一個(gè)才是你的。

第二行的框內(nèi)內(nèi)容,表示當(dāng)前線程的執(zhí)行狀態(tài),是運(yùn)行狀態(tài)還是TIME_WAITING,還是等待鎖等,可以根據(jù)線程狀態(tài)來了解。

第三個(gè)大框中的內(nèi)容就和我們異常時(shí)輸出的 stackTrace 一樣,是當(dāng)前代碼的調(diào)用鏈。

第四個(gè)框中的內(nèi)容,是當(dāng)前線程掛的鎖的情況。

上面的截圖,是沒有鎖互相占用的情況下的輸出。如果一個(gè)多線程中有鎖等待時(shí),會(huì)有類似這樣的輸出:

線程狀態(tài)變成了 BLOCKED

注意,此時(shí)線程狀態(tài)變成了 BLOCKED, 同時(shí),在線程的調(diào)用鏈中,有一個(gè)waiting to lock 的輸出, 同時(shí),在下方持胡鎖的線程中,會(huì)有一個(gè) lock xxx,這個(gè)是當(dāng)前鎖對(duì)象,通過這個(gè)就可以看出當(dāng)前還有哪些線程在等待同一個(gè)鎖。

所以回到前面的問題,如果此時(shí)因?yàn)殒i占用導(dǎo)致的,可以從輸出中看到,同時(shí)如果是數(shù)據(jù)庫(kù)連接池滿了,線程就會(huì)停在數(shù)據(jù)庫(kù)連接的操作上,在 stackTrace 中一眼就能看的出來,甚至網(wǎng)絡(luò) Socket 讀取之類的在等待,都會(huì)在調(diào)用鏈中體現(xiàn)出來,從而可以快速的定位問題,解決問題。

那對(duì)于應(yīng)用的觀察分析,還需要注意的是,可以間隔幾秒鐘時(shí)間執(zhí)行一下 jstack,分析一下輸出,然后對(duì)比一下幾次輸出的區(qū)別,看看這一段時(shí)間內(nèi)應(yīng)用有哪些地方在執(zhí)行,分析和解決問題。

【本文為51CTO專欄作者“侯樹成”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過作者微信公眾號(hào)『Tomcat那些事兒』獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-06-09 15:17:48

Java線程jstack

2021-07-16 09:55:46

數(shù)據(jù)工具軟件

2017-06-09 15:01:35

Java可視化JVisual VM

2009-12-23 17:10:26

2025-05-13 08:20:58

2024-02-29 16:11:05

2019-10-29 06:30:31

告警疲勞網(wǎng)絡(luò)安全安全風(fēng)險(xiǎn)

2017-06-02 09:52:50

2021-12-26 18:22:30

Java線程多線程

2018-05-27 08:24:55

2017-12-15 09:05:16

Linux終端高手Bash shell

2022-03-03 18:28:28

Harmony進(jìn)程任務(wù)管理模塊

2018-11-29 10:22:43

Java應(yīng)用服務(wù)器

2018-09-30 10:00:23

Python編程語言代碼質(zhì)量

2020-09-01 07:22:04

網(wǎng)絡(luò)戰(zhàn)武器系統(tǒng)網(wǎng)絡(luò)安全

2012-03-02 14:12:30

Javajstack

2023-10-19 08:30:58

線程源碼thread

2022-10-12 14:23:30

Java線程

2021-12-28 09:10:55

Java線程狀態(tài)

2018-01-30 17:54:37

數(shù)據(jù)庫(kù)MySQLSQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: a级片在线观看 | 亚洲一区二区免费电影 | 久久综合伊人 | 国产精品一区二区久久 | 一区二区三区欧美 | 久久久久久久久久久久久九 | 国产精品久久久久久婷婷天堂 | 色综合久| 一区二区在线不卡 | 二区国产 | 黄色网址大全在线观看 | 精品久久久久久久 | 日韩电影一区二区三区 | 中文字幕不卡在线观看 | 欧美 视频| 日韩国产中文字幕 | 日本特黄a级高清免费大片 特黄色一级毛片 | 国产片侵犯亲女视频播放 | 欧美电影一区 | 午夜日韩| www成人免费视频 | 国产成人福利在线观看 | 成人在线免费观看av | 国产在线视频一区 | 久久一区精品 | 香蕉大人久久国产成人av | av大片| 亚洲精品久久久久中文字幕二区 | 日韩在线免费播放 | 在线播放亚洲 | 精品国产精品三级精品av网址 | 国产日韩精品在线 | 日韩成人在线一区 | a爱视频| 韩国理论电影在线 | 欧美色人 | 中文字幕在线网 | 国产精品久久久久一区二区三区 | 成人午夜在线 | 日韩欧美在线不卡 | 亚洲视频在线免费观看 |