丨java虛擬機監(jiān)控及診斷工具命令行篇_第1頁
丨java虛擬機監(jiān)控及診斷工具命令行篇_第2頁
丨java虛擬機監(jiān)控及診斷工具命令行篇_第3頁
丨java虛擬機監(jiān)控及診斷工具命令行篇_第4頁
丨java虛擬機監(jiān)控及診斷工具命令行篇_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

$jps-18331org.example.Fooo18332jdk.jcmd/sun.tools.jps.Jps-mlv-需要注意的是,如果某Java進(jìn)程關(guān)閉了默認(rèn)開啟的UsePerfData參數(shù)(即使用參數(shù)-XX:-UsePerfData),那么jps命令(以及下面介紹的jstat)Java當(dāng)獲得Java進(jìn)程的進(jìn)程ID之后,我們便可以調(diào)用接下來介紹的各項及診斷工具了jstat命令(幫助文檔)Java$jstat-在這些子命令中,-class將打印類加載相關(guān)的數(shù)據(jù),-compiler和直至目標(biāo)Java進(jìn)程終止,或者達(dá)到我們所配置的最大打印次數(shù)。具體示例如下所示:#Usage:jstat-$jstat-gc221261s [-t][-hlines]VMID 44546474當(dāng)本地環(huán)境的Java進(jìn)程時,VMID可以簡單理解為PID。如果需要環(huán)境的Java進(jìn)程,你可以參考jstat的幫助文檔。在上面這個示例中,22126進(jìn)程是一個使用了CMS回收器的Java進(jìn)程。我們利用jstat的-gc子命令,來打印該進(jìn)程回收相關(guān)的數(shù)據(jù)。命令最后的1s4表示每隔1秒打印一次,共打印4次。在-gc子命令的輸出中,前四列分別為兩個Survivor區(qū)的容量(Capacity)(Utility)SurvivorSurvivor的內(nèi)存使用量為0。G1GC$jstat-gc22208 328848,026886,4429104,027132,85 71680,029872,027952,462048,069632,030128,028030,47在上面這個示例中,jstat每隔1s便會打印回收的信息,并且不斷重復(fù)下去你可能已經(jīng)留意到,S0C和S0U0,Survivor(S1C)可能會下降至0。G1GC,JavaEdenSurvivorEdenSurvivor因此,JavaG1GCSurvivor量存放至S1C和S1U中,而S0C和S0U則被設(shè)置為0。當(dāng)發(fā)生回收時,Java虛擬機可能出現(xiàn)Survivor內(nèi)存區(qū)域內(nèi)的對象全被回收或晉升的現(xiàn)在這種情況下,Java結(jié)果是,堆中可能完全沒有Survivor內(nèi)存區(qū)域,因而相應(yīng)的S1C和S1U將會是0。jstat還有一個非常有用的參數(shù)-tJava例如,在下面這個示例中,第一列代表該Java進(jìn)程已經(jīng)啟動了10.7秒。$jstat-gc-t M 10,7JavaGC(GCT),或者兩次測量的間隔時間以及總GC時間的增量,來得出GC時間占運行時間的比例。2090%,則說明堆里幾乎沒有可用空間,隨時都可能拋出OOM異常。jstat還可以用來判斷是否出現(xiàn)內(nèi)存泄漏。在長時間運行的Java程序中,我們可以運行jstatOU(即已占用的老年代內(nèi)存)然后,我們每隔一段較長的時間重復(fù)一次上述操作,來獲得多組OU最小值。如果這些值呈上漲趨勢,則說明該Java程序的老年代內(nèi)存已使用量在不斷上漲,這意味著無法回收的對體含義。至于文檔中漏掉的CGC和CGCT,它們分別代表并發(fā)GCStop-在這種情況下,我們便可以請jmap命令(幫助文檔)Java-finalizerinfo,該子命令將打印所有待finalize的對象。-dumpJava-dump:live只保存堆中的存活我們通常會利用jmapdump:live,format=b,file=filename.bin命令,將堆中所om=將使aphpro(在Jaa9中已被移除)-:+HapmAteulGC-X:+HpupOuOMerEro件。這種格式的文件可以被其他GUI工具查看,具體我會在下一篇中進(jìn)行演示。$jmap-histo #bytesclassname3 56[B78[Ljava.lang.Object;9[Ijava.math.BigIntegerjava.lang.String11mp將堆中的所有對象,為了保證在此過程中不被應(yīng)用線程干擾,mp助安全點機制,讓所有線程停留在不改變堆中數(shù)據(jù)的狀態(tài)。也就是說,由mp導(dǎo)出的堆快照必定是安全點位置的。這可能導(dǎo)致基于該堆快照的分析結(jié):ve選項將無法探知到這些對象。另外,如果某個線程長時間無法跑到安全點,jp將一直等下去。上一小節(jié)的sat同。這是因為回收器會主動將jtt所需要的 數(shù)據(jù)保存至固定位置之中,而tt只需直接即可。////CTRL+C的SIGINT信號無法停止,需要SIGKILLstaticdoublesum=4publicstaticvoidmain(String[]args)for(inti=0;i< ;i++){//countedsum+=Math.log(i);//Math.logisan 9jmap(以及接下來的jinfo、jstack和jcmd)JavaAttachAPI,因此只能本地Java進(jìn)程。一旦開啟Java虛擬機參數(shù)DisableAtta echanism),基于AttachAPI令將無法執(zhí)行。反過來說,jinfo命令(幫助文檔)可用來查看目標(biāo)Java進(jìn)程的參數(shù),如傳遞給Java虛擬機的(jvm_args)、-XX參數(shù)(VMFlags)JavaSystem.getProperty獲取的-D參數(shù)(SystemProperties)。1$jinfo2JavaSystem3VMpilerCount=4-XX:ConcGCThreads=3-XX:G1ConcRefinementThreads=10-VMjvm_args:-Xlog:gc-mand:java_class_path(initial):LauncherType:jinfo還可以用來修改目標(biāo)Java進(jìn)程的“manageable舉個例子,我們可以使用jinfoflag+HeapDumpAfterFullGC<PID><PID>JavaHeapDumpAfterFullGC參數(shù)。你可以通過下述命令查看其他"manageable"虛擬機參數(shù):$java-XX:+PrintFlagsFinal-version|grepintx =intx =-intx =bool =bool =bool =ccstr uintxMaxHeap =uintxMinHeap =bool =bool =13javaversion"11"2018-09-Java(TM)SERuntimeEnvironment18.9(buildJavaHotSpot(TM)64-BitServerVM18.9(build11+28,mixedjstack命令(幫助文檔)Java$jstack34"Thread-0"#12prio=5os_prio=31cpu=1.32mselapsed=34.24stid=0x00007fb08601c800java.lang.Thread.State:BLOCKED(onobjectat-waitingtolock ff904c0>(a-locked ff904b0>(aatDeadLock$$Lambda$1/0x0000000800060840.run(Unknownat12"Thread-1"#13prio=5os_prio=31cpu=1.43mselapsed=34.24stid=0x00007fb08601f800java.lang.Thread.State:BLOCKED(onobjectat-waitingtolock ff904b0>(a-locked ff904c0>(aatDeadLock$$Lambda$2/0x0000000800063040.run(Unknownat2022JNIglobalrefs:6,weakrefs:25FoundoneJava-level26waitingtolockmonitor (object ff904c0,awhichisheldby"Thread-waitingtolockmonitor (object ff904b0,awhichisheldby"Thread-34Javastackinformationforthethreadslisted35at-waitingtolock ff904c0>(a-locked ff904b0>(aatDeadLock$$Lambda$1/0x0000000800060840.run(Unknownatat-waitingtolock ff904b0>(a-locked ff904c0>(aatDeadLock$$Lambda$2/0x0000000800063040.run(Unknownat49Found1(locked…)以及正在請求的鎖(waitingtolock…),你還可以直接使用jcmd命令(幫助文檔),來替代前面除了jstatPerfCounter.printPerformanceCounter,但是它沒有保留另外,在下一篇中介紹jcmd中JavaFlightRecorder相關(guān)的子命令今天我介紹了JDK中用于及診斷令行工具。我們再來回顧一下jps將打印所有正在運行的Javajstat允許用戶查看目標(biāo)Java進(jìn)程的類加載、即時編譯以及回收相關(guān)的信息。它常jmap允許用戶統(tǒng)計目標(biāo)Java進(jìn)程的堆中存放的Java對象,并將它們導(dǎo)出成二進(jìn)制文jinfo將打印目標(biāo)Java進(jìn)程的配置參

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論