分享一款JVM線程堆棧在線分析工具

JVM大家可能都知道是個(gè)什么玩意-Java虛擬機(jī),但是到底是個(gè)什么鬼?相信即使工作3-5年的程序員可能也不大了解。

成都創(chuàng)新互聯(lián)公司是專業(yè)的定陶網(wǎng)站建設(shè)公司,定陶接單;提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行定陶網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

如題所述,今天與大家分享的是如何分析JVM的線程堆棧以及如何從堆棧信息中找出問(wèn)題。線程堆棧分析盡管不是初學(xué)者一門必備的技術(shù),但是對(duì)于自身走向高程來(lái)說(shuō)應(yīng)該是必備的傍身技能。

哎...內(nèi)存又溢出了,唉...?怎么突然CPU200%了等等一系列的問(wèn)題都需要從線程堆棧中存儲(chǔ)的信息找到問(wèn)題所在。

分享一款JVM線程堆棧在線分析工具

JVM 線程堆棧

首先我們了解一下JVM 線程堆棧——它是什么?

JVM線程堆棧是一個(gè)給定時(shí)間的快照,它能向你提供所有被創(chuàng)建出來(lái)的Java線程的完整清單.

每一個(gè)被發(fā)現(xiàn)的Java線程都會(huì)給你如下信息:

– 線程的名稱;經(jīng)常被中間件廠商用來(lái)識(shí)別線程的標(biāo)識(shí),一般還會(huì)帶上被分配的線程池名稱以及狀態(tài) (運(yùn)行,阻塞等等.)

– 線程類型 & 優(yōu)先級(jí),例如 : daemon prio=3 中間件程序一般以后臺(tái)守護(hù)的形式創(chuàng)建他們的線程,這意味著這些線程是在后臺(tái)運(yùn)行的;它們會(huì)向它們的用戶提供服務(wù),例如:Java EE應(yīng)用程序

– Java線程ID,例如 : tid=0x000000011e52a800 這是通過(guò) java.lang.Thread.getId() 獲得的Java線程ID,它常常用自增長(zhǎng)的長(zhǎng)整形 1..n 實(shí)現(xiàn)

– 原生線程ID,例如 : nid=0x251c ,原生線程ID可以讓你獲得諸如從操作系統(tǒng)的角度來(lái)看那個(gè)線程在你的JVM中使用了大部分的CPU時(shí)間等這樣的相關(guān)信息

– Java線程狀態(tài)和詳細(xì)信息,例如: waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)可以快速的了解到線程狀態(tài)極其當(dāng)前阻塞的可能原因

– Java線程棧跟蹤;這是目前為止你能從線程堆棧中找到的最重要的數(shù)據(jù). 這也是你花費(fèi)最多分析時(shí)間的地方,因?yàn)镴ava棧跟蹤向提供了你將會(huì)在稍后的練習(xí)環(huán)節(jié)了解到的導(dǎo)致諸多類型的問(wèn)題的根本原因,所需要的90%的信息。

問(wèn)題描述

linux系統(tǒng)下,線上環(huán)境Tomcat進(jìn)程CPU突然飆升到200%

問(wèn)題解決

查找對(duì)應(yīng)Tomcat進(jìn)程號(hào)

ps -ef|grep tomcat8_itstyle

導(dǎo)出堆棧信息,查詢進(jìn)程PID為8564

jstack -l 8564 >  8564.stack

下載8564.stack并打包為zip格式上傳到GCeasy,生成分析報(bào)告如下: 

分享一款JVM線程堆棧在線分析工具

吃不吃精,喜不喜歡,界面話報(bào)告分析,總有一項(xiàng)讓你喜歡。

擴(kuò)展閱讀

jps命令

jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一個(gè)顯示當(dāng)前所有java進(jìn)程pid的命令,簡(jiǎn)單實(shí)用,非常適合在linux/unix平臺(tái)上簡(jiǎn)單察看當(dāng)前java進(jìn)程的一些簡(jiǎn)單情況。很多人都是用過(guò)unix系統(tǒng)里的ps命令,這個(gè)命令主要是用來(lái)顯示當(dāng)前系統(tǒng)的進(jìn)程情況,有哪些進(jìn)程以及進(jìn)程id。 jps 也是一樣,它的作用是顯示當(dāng)前系統(tǒng)的java進(jìn)程情況及進(jìn)程id。我們可以通過(guò)它來(lái)查看我們到底啟動(dòng)了幾個(gè)java進(jìn)程(因?yàn)槊恳粋€(gè)java程序都會(huì)獨(dú)占一個(gè)java虛擬機(jī)實(shí)例),并可通過(guò)opt來(lái)查看這些進(jìn)程的詳細(xì)啟動(dòng)參數(shù)。

命令格式:jps [options ] [ hostid ]

[options]選項(xiàng) : -q:只顯示pid,不顯示class名稱,jar文件名和傳遞給main 方法的參數(shù) -m:輸出main method的參數(shù) -l:輸出完全的包名,應(yīng)用主類名,jar的完全路徑名 -v:輸出jvm參數(shù)

jstack命令

命令格式: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] [server-id@]remote-hostname-or-IP

常用參數(shù)說(shuō)明

1)options:

executable Java executable from which the core dump was produced.(可能是產(chǎn)生core dump的java可執(zhí)行程序)

core 將被打印信息的core dump文件

remote-hostname-or-IP 遠(yuǎn)程debug服務(wù)的主機(jī)名或ip

server-id 唯一id,假如一臺(tái)主機(jī)上多個(gè)遠(yuǎn)程debug服務(wù)

2)基本參數(shù):

-F當(dāng)’jstack [-l] pid’沒(méi)有相應(yīng)的時(shí)候強(qiáng)制打印棧信息

-l長(zhǎng)列表. 打印關(guān)于鎖的附加信息,例如屬于java.util.concurrent的ownable synchronizers列表.

-m打印java和native c/c++框架的所有棧信息.

-h | -help打印幫助信息

pid 需要被打印配置信息的java進(jìn)程id,可以用jps查詢。

【本文轉(zhuǎn)自爪哇筆記 作者:小柒2012 原文鏈接:https://mp.weixin.qq.com/s/LdoOk8zQXVn7IHB6WI0EiQ】

文章題目:分享一款JVM線程堆棧在線分析工具
本文鏈接:http://muchs.cn/article2/iehooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站收錄電子商務(wù)、建站公司、企業(yè)建站、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)