成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JVM詳解3.JDK監(jiān)控和故障處理工具

Keven / 739人閱讀

摘要:點(diǎn)擊進(jìn)入我的博客命令行工具這些工具大多數(shù)是類庫(kù)的一層薄的包裝,它們的主要功能代碼是在類庫(kù)中實(shí)現(xiàn)的??梢暬ぞ呤堑侥壳盀橹闺S發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序,并且可以預(yù)見(jiàn)在未來(lái)一段時(shí)間內(nèi)都是官方主力發(fā)展的虛擬機(jī)故障處理工具。

點(diǎn)擊進(jìn)入我的博客 3.1 JDK命令行工具



這些工具大多數(shù)是tools.jar類庫(kù)的一層薄的包裝,它們的主要功能代碼是在tools類庫(kù)中實(shí)現(xiàn)的。還有一些甚至就是由Shell腳本直接生成的。

名稱 作用
jps JVM Process Status Tool,顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機(jī)進(jìn)程
jstat JVM Statistics Monitoring Tool,用于收集HotSpot虛擬機(jī)各方面的運(yùn)行數(shù)據(jù)
jinfo Configuration Info for Java,顯示虛擬機(jī)配置信息
jmap Memory Map for Java,生成虛擬機(jī)的內(nèi)存轉(zhuǎn)儲(chǔ)快照(heapdump文件)
jhat JVM Heap Dump Browser,用于分析heapmap文件,它會(huì)建立一個(gè)http/html服務(wù)器讓用戶可以在瀏覽器上查看分析結(jié)果
jstack Stack Trace for Java,顯示虛擬機(jī)的線程快照
3.1.1 jps:虛擬機(jī)進(jìn)程狀況工具
作用

可以列出正在運(yùn)行的虛擬機(jī)進(jìn)程,并顯示虛擬機(jī)執(zhí)行主類名稱(main()函數(shù)所在的類)以及這些進(jìn)程的本地虛擬機(jī)唯一ID(Local Virtual Machine Identifier)。

對(duì)于本地虛擬機(jī)進(jìn)程來(lái)說(shuō),LVMI與操作系統(tǒng)的進(jìn)程ID(Process Identifier,PID)是一致的。

jps可以通過(guò)RMI協(xié)議開(kāi)啟了RMI服務(wù)的遠(yuǎn)程虛擬機(jī)進(jìn)程狀態(tài),hostid為RMI注冊(cè)表中注冊(cè)的主機(jī)名。

命令格式

jsp [options] [hostid]

主要選項(xiàng)

屬性 | 作用

-p | 只輸出LVMID,省略主類的名稱
-m | 輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)傳遞給主類main()函數(shù)的參數(shù)
-l | 輸出主類的全名,如果進(jìn)程執(zhí)行的是jar包,輸出jar路徑
-v | 輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)jvm參數(shù)

3.1.2 jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具
作用

jstat是用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具。它可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存、垃圾回收、JIT編譯等運(yùn)行數(shù)據(jù),在沒(méi)有GUI圖形界面,只是提供了純文本控制臺(tái)環(huán)境的服務(wù)器上,它將是運(yùn)行期定位虛擬機(jī)性能問(wèn)題的首選工具。

命令格式

jstat [option vmid [interval [s|ms] [count]]]

對(duì)于命令格式中的VMID和LVMID,如果是本地虛擬機(jī)進(jìn)程,VMID和LVMID是一致的

如果是遠(yuǎn)程虛擬機(jī),那VMID的格式應(yīng)當(dāng)是:[protocol:] [//] lvmid[@hostname[:port]/servername]

參數(shù)interval和count分別表示查詢的間隔和次數(shù),如果省略這兩個(gè)參數(shù),說(shuō)明只查詢一次。

主要選項(xiàng)
選項(xiàng) 作用
-class 監(jiān)視裝載類、卸載類、總空間以及類裝載所耗費(fèi)的時(shí)間
-gc 監(jiān)視java堆狀況,包括eden區(qū)、兩個(gè)survivor區(qū)、老年代、永久代等的容量、已用空間、GC時(shí)間合計(jì)信息
-gccapacity 監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注java堆各個(gè)區(qū)域使用到最大、最小空間
-gcutil 監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注已使用控件占總空間的百分比
-gccause 與-gcutil功能一樣,但是會(huì)額外輸出導(dǎo)致上一次gc產(chǎn)生的原因
-gcnew 監(jiān)視新生代GC情況
-gcnewcapacity 監(jiān)視內(nèi)容與-gcnew基本相同,輸出主要關(guān)注使用到的最大、最小空間
-gcold 監(jiān)視老年代GC情況
-gcoldcapacity 監(jiān)視內(nèi)容與-gcold基本相同,輸出主要關(guān)注使用到的最大、最小空間
-gcpermcapacity 輸出永久代使用到的最大、最小空間
-compiler 輸出JIT編譯過(guò)的方法、耗時(shí)等信息
-printcompilation 輸出已經(jīng)被JIT編譯過(guò)的方法
示例

S0:Survivor1區(qū)當(dāng)前使用比例

S1:Survivor2區(qū)當(dāng)前使用比例

E:Eden區(qū)使用比例 9.36%

O:老年代使用比例

M:元數(shù)據(jù)區(qū)使用比例

CCS:壓縮使用比例

YGC:年輕代垃圾回收次數(shù) 7次

FGC:老年代垃圾回收次數(shù) 6次

FGCT:老年代垃圾回收消耗時(shí)間 0.119秒

GCT:垃圾回收消耗總時(shí)間 0.145秒

3.1.3 jinfo:Java配置信息工具
作用

jinfo的作用是實(shí)時(shí)的查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)。

命令格式

jinfo [option] pid

主要選項(xiàng)
選項(xiàng) 作用
-flag to print the value of the named VM flag
-flag [+/-] to enable or disable the named VM flag
-flag = to set the named VM flag to the given value
-flags to print VM flags
-sysprops to print Java system properties
to print both of the above
-h / -help to print this help message
3.1.4 jmap:Java內(nèi)存映像工具
作用

jmap命令用于生成堆轉(zhuǎn)儲(chǔ)快照。

查詢finalize執(zhí)行隊(duì)列、java堆和永久代的詳細(xì)信息。如空間使用率、當(dāng)前用的是哪種收集器等。

命令格式

jmap [option] vmid

主要選項(xiàng)
選項(xiàng) 作用
-dump 生成java堆轉(zhuǎn)儲(chǔ)快照。格式為: -dump:[live,]format=b,file=,其中l(wèi)ive子參數(shù)說(shuō)明是否只dump出存活的對(duì)象
-finalizerinfo 顯示在F-Queue中等待Finalizer線程執(zhí)行finalize方法的對(duì)象。只在Linux/Solaris平臺(tái)下有效
-heap 顯示java堆詳細(xì)信息,如使用哪種收集器、參數(shù)配置、分代情況等,在Linux/Solaris平臺(tái)下有效
-jisto 顯示堆中對(duì)象統(tǒng)計(jì)信息,包含類、實(shí)例對(duì)象、合集容量
-permstat 以ClassLoader為統(tǒng)計(jì)口徑顯示永久代內(nèi)存狀態(tài)。只在Linux/Solaris平臺(tái)下有效
-F 當(dāng)虛擬機(jī)進(jìn)程對(duì)-dump選項(xiàng)沒(méi)有相應(yīng)時(shí)??墒褂眠@個(gè)選項(xiàng)強(qiáng)制生成dump快照。只在Linux/Solaris平臺(tái)下有效
3.1.5 jhat:虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具
作用

提供jhat與jmap搭配使用,來(lái)分析dump生成的堆快照。jhat內(nèi)置了一個(gè)微型的HTTP/HTML服務(wù)器,生成dump文件的分析結(jié)果后,可以在瀏覽器中查看。

一般不會(huì)去直接使用jhat命令來(lái)分析demp文件:原因一是一般不會(huì)在部署應(yīng)用程序的服務(wù)器上直接分析dump文件,一般會(huì)盡量將dump文件拷貝到其他機(jī)器上進(jìn)行分析,因?yàn)榉治龉ぷ魇且粋€(gè)耗時(shí)且消耗硬件資源的過(guò)程,既然都要在其他機(jī)器上進(jìn)行,就沒(méi)必要受到命令行工具的限制了;另外一個(gè)原因是jhat的分析功能相對(duì)來(lái)說(shuō)很簡(jiǎn)陋,VisualVM以及專門分析dump文件的Eclipse Memory Analyzer、IBM HeapAnalyzer等工具,都能實(shí)現(xiàn)比jhat更強(qiáng)大更專業(yè)的分析功能。

命令格式

jhat [ options ] heap-dump-file

3.1.6 jstack:java棧跟蹤工具
作用

jstack命令用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照。

線程快照就是當(dāng)前虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧集合,生成線程快照的主要目的是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因,如線程死鎖、死循環(huán)、請(qǐng)求外部資源導(dǎo)致長(zhǎng)時(shí)間等待等。

命令格式

jstack [option] vmid

主要選項(xiàng)
選項(xiàng) 作用
-F 當(dāng)正常輸出的請(qǐng)求不被響應(yīng)時(shí),強(qiáng)制輸出線程堆棧
-l 除堆棧外,顯示關(guān)于鎖的附加信息
-m 如果調(diào)用到本地方法的話,可以顯示c/c++的堆棧
3.2 JConsole:JDK可視化工具

JConsole ( Java Monitoring and Management Console ) 是—種基于JMX的可視化監(jiān)視管理工具。它管理部分的功能是針對(duì)JMX MBean進(jìn)行管理,由于MBean可以使用代碼、中間件服務(wù)器的管理控制臺(tái)或者所有符合JMX規(guī)范的軟件進(jìn)行訪問(wèn)。

概覽

“概述”頁(yè)簽顯示的是整個(gè)虛擬機(jī)主要運(yùn)行數(shù)據(jù)的概覽,其中包括“堆內(nèi)存使用情況”、“線程”、“類”、“CPU使用情況”4種信息的曲線圖

內(nèi)存

“內(nèi)存”頁(yè)簽相當(dāng)于可視化的jstat命令,用于監(jiān)視受收集器管理的虛擬機(jī)內(nèi)存(Java堆和永久代)的變化趨勢(shì)。

線程

“線程”頁(yè)簽的功能相當(dāng)于可視化的jstack命令,遇到線程停頓時(shí)可以使用這個(gè)頁(yè)簽進(jìn)行監(jiān)控分析。

3.3 VisualVM:可視化工具

VisualVM(All-in-One Java Troubleshooting Tool)是到目前為止隨JDK發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序,并且可以預(yù)見(jiàn)在未來(lái)一段時(shí)間內(nèi)都是官方主力發(fā)展的虛擬機(jī)故障處理工具。官方在VisualVM的軟件說(shuō)明中寫上了“All-in-One” 的描述字樣,預(yù)示著它除了運(yùn)行監(jiān)視、故障處理外,還提供了很多其他方面的功能。如性能分析,VisualVM的性能分析功能甚至比起JProfiler、YourKit等專業(yè)且收費(fèi)的Profiling工具都不會(huì)遜色多少,而且VisualVM的還有一個(gè)很大的優(yōu)點(diǎn):不需要被監(jiān)視的程序基于特殊Agent運(yùn)行,因此它對(duì)應(yīng)用程序的實(shí)際性能的影響很小,使得它可以直接應(yīng)用在生產(chǎn)環(huán)境中。這個(gè)優(yōu)點(diǎn)是JProfiler、YourKit等工具無(wú)法與之媲美的。

VisualVM兼容范圍與插件安裝

VisualVM基于NetBeans平臺(tái)開(kāi)發(fā),因此它一開(kāi)始就具備了插件擴(kuò)展功能的特性,通過(guò)插件擴(kuò)展支持,VisualVM可以做到:

顯示虛擬機(jī)進(jìn)程以及進(jìn)程的配置、環(huán)境信息(jps、 jinfo)。

監(jiān)視應(yīng)用程序的CPU、GC、堆、方法區(qū)以及線程的信息(jstat、jstack)。

dump以及分析堆轉(zhuǎn)儲(chǔ)快照(jmap、jhat)。

方法級(jí)的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長(zhǎng)的方法。

離線程序快照:收集程序的運(yùn)行時(shí)配置、線程dump、內(nèi)存dump等信息建立個(gè)快照, 可以將快照發(fā)送開(kāi)發(fā)者處進(jìn)行Bug反饋。

生成、瀏覽堆轉(zhuǎn)儲(chǔ)快照

在VisualVM中生成dump文件有兩種方式,可以執(zhí)行下列任一操作:

在“應(yīng)用程序”窗口中右鍵單擊應(yīng)用程序節(jié)點(diǎn),然后選擇“堆Dump”。

在“應(yīng)用程序”窗口中雙擊應(yīng)用程序節(jié)點(diǎn)以打開(kāi)應(yīng)用程序標(biāo)簽,然后在“監(jiān)視”標(biāo)簽中單擊“堆Dump”。

分析程序性能

在Profiler頁(yè)簽中,VisualVM提供了程序運(yùn)行期間方法級(jí)的CPU執(zhí)行時(shí)間分析以及內(nèi)存分析,做Profiling分析肯定會(huì)對(duì)程序運(yùn)行性能有比較大的影響,所以一般不在生產(chǎn)環(huán)境中使用這項(xiàng)功能。

BTrace動(dòng)態(tài)日志跟蹤

BTrace本身也是可以獨(dú)立運(yùn)行的程序。它的作用是在不停止目標(biāo)程序運(yùn)行的前提下,通過(guò)HotSpot虛擬機(jī)的HotSwap技術(shù)動(dòng)態(tài)加入原本并不存在的調(diào)試代碼。這項(xiàng)功能對(duì)實(shí)際生產(chǎn)中的程序很有意義:經(jīng)常遇到程序出現(xiàn)問(wèn)題,但排查錯(cuò)誤的一些必要信息,譬如方法參數(shù)、返回值等,在開(kāi)發(fā)時(shí)并沒(méi)有打印到日志之中,以至于不得不停掉服務(wù),通過(guò)調(diào)試增量來(lái)加入日志代碼以解決問(wèn)題。當(dāng)遇到生產(chǎn)環(huán)境服務(wù)無(wú)法隨便停止時(shí),缺一兩句日志導(dǎo)致排錯(cuò)進(jìn)行不下去是一件非常郁悶的事情。BTrace的用法還有許多,打印調(diào)用堆棧、參數(shù)、返回值只是最基本的應(yīng)用,在它的網(wǎng)站上有使用BTrace進(jìn)行性能監(jiān)視、定位連接泄漏和內(nèi)存泄漏、解決多線程競(jìng)爭(zhēng)問(wèn)題的例子。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/72763.html

相關(guān)文章

  • 深入理解虛擬機(jī)之虛擬機(jī)性能監(jiān)控故障處理工具

    摘要:監(jiān)控和故障處理工具顯示指定系統(tǒng)內(nèi)所有的虛擬機(jī)進(jìn)程用于收集虛擬機(jī)各方面的運(yùn)行數(shù)據(jù)。的常用功能選項(xiàng)測(cè)試上面輸出了我正在運(yùn)行程序的包名下的類名虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具使用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具。 《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第二版》讀書(shū)筆記與常見(jiàn)面試題總結(jié) 本節(jié)常見(jiàn)面試題(推薦帶著問(wèn)題閱讀,問(wèn)題答案在文中都有提到): JVM調(diào)優(yōu)的常見(jiàn)命令行工具有哪些?...

    jas0n 評(píng)論0 收藏0
  • 同樣是做后端的,為什么你同學(xué)年薪80萬(wàn),你20多萬(wàn)?

    摘要:然而偶爾的一次聚會(huì),你聽(tīng)說(shuō)和自己一起出道的同學(xué)早已經(jīng)年薪萬(wàn),而自己卻囊中羞澀。這個(gè)時(shí)候,你可能會(huì)懷疑自己的能力,也痛恨為什么當(dāng)初自己沒(méi)有好好復(fù)習(xí)。 作為一個(gè) Java 程序員,我們深知水平的深淺決定你的收入高低,月工資下到七八千,上到十幾萬(wàn)都是很正常的事情。許多人的現(xiàn)狀是平時(shí)總是陷在業(yè)務(wù)開(kāi)發(fā)...

    鄒強(qiáng) 評(píng)論0 收藏0
  • 麻了,都是科班出身的,學(xué)弟月薪卻是我的3倍。

    摘要:可現(xiàn)在五年過(guò)去了,他想跳槽卻鮮有人問(wèn)津。最可氣的是比他晚一年畢業(yè)的學(xué)弟,勤勤懇懇在一家中型互聯(lián)網(wǎng)企業(yè)干了年,現(xiàn)在已經(jīng)跳槽到了阿里,月薪是我這個(gè)同學(xué)的倍。 我有個(gè)同學(xué)大學(xué)畢業(yè),因?yàn)閰s少工作經(jīng)驗(yàn),又不愿意去正經(jīng)的互聯(lián)網(wǎng)企業(yè)做實(shí)習(xí)生,他嫌工資太低,于是進(jìn)了家外包公司,那時(shí)候感覺(jué)待遇還可以??涩F(xiàn)在五...

    wangzy2019 評(píng)論0 收藏0
  • 作為一名Java程序員,因?yàn)橥低到铀交畋?..

    摘要:接私活對(duì)程序員這個(gè)圈子來(lái)說(shuō)是一個(gè)既公開(kāi)又隱私的話題,不說(shuō)全部,應(yīng)該大多數(shù)程序員都有過(guò)想要接私活的想法,當(dāng)然,也有部分得道成仙的不主張接私活。 接私活 對(duì)程序員這個(gè)圈子來(lái)說(shuō)是一個(gè)既公開(kāi)又隱私的話題,不說(shuō)全部,應(yīng)該大多數(shù)程序員都有過(guò)想要接私活的想法,當(dāng)然,也有部分得道成仙的不主張接私活。但是很少...

    Aomine 評(píng)論0 收藏0
  • Java程序員工作3年,薪資為何會(huì)被應(yīng)屆生倒掛?

    摘要:同時(shí)也會(huì)關(guān)注市場(chǎng)上同崗位薪資,以便對(duì)企業(yè)內(nèi)部薪資結(jié)構(gòu)做出相應(yīng)調(diào)整。一般來(lái)說(shuō),相同崗位和職責(zé)的員工,薪資低于市場(chǎng)不超過(guò),都屬于合理范疇,因?yàn)橐粋€(gè)員工不會(huì)為了的薪酬而跳槽。同時(shí),還能激勵(lì)員工自我提升,以獲得相應(yīng)技能市場(chǎng)所給予的報(bào)酬。 各位職場(chǎng)人都聽(tīng)說(shuō)過(guò)薪資倒掛這詞兒吧,這個(gè)情況在行業(yè)內(nèi)早就不是什...

    szysky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<