您好,登錄后才能下訂單哦!
Java中怎么監(jiān)控一個(gè)應(yīng)用的性能,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
標(biāo)準(zhǔn)參數(shù)(Eg.)
-help
-server/-client
-version/-showversion
-cp/-classpath
X參數(shù)(非標(biāo)準(zhǔn)化參數(shù))
-Xint: 解釋執(zhí)行
-Xcomp: 第一次使用就編譯成本地代碼
-Xmixed: 混合模式,jvm自己來決定是否編譯成本地代碼
XX參數(shù)(非標(biāo)轉(zhuǎn)化參數(shù),相對(duì)不穩(wěn)定,主要用于JVM調(diào)優(yōu)和Debug)
XX參數(shù)的分類:
-Xmx/-Xms
(實(shí)際上是XX參數(shù)) 設(shè)置JVM的最大內(nèi)存和最小內(nèi)存,-Xms等價(jià)于-XX:InitialHeapSize
,-Xmx等價(jià)于-XX:MaxHeapSize
-XX:+PrintFlagsInitial
查看JVM運(yùn)行參數(shù)的初始值
-XX:+PrintFlagsFinal
查看JVM運(yùn)行參數(shù)的最終值(=表示默認(rèn)值,:=表示被用戶或者JVM修改后的值)
-XX:+UnlockExperimentalVMOptions
解鎖實(shí)驗(yàn)參數(shù)
-XX:+UnlockDiagnosticVMOptions
解鎖診斷參數(shù)
-XX:+PrintCommandLineFlags
打印命令行參數(shù)
-XX:+HeapDumpOnOutOfMemoryError
當(dāng)發(fā)生內(nèi)存溢出了,自動(dòng)Dump Heap Error
-XX:HeapDumpPath=./
內(nèi)存溢出HeapDump的日志,./
指的是當(dāng)前運(yùn)行目錄
Boolean類型: -XX:[+|-]<name>
,例如: -XX:+UseConcMarkSweepGC
非Boolean類型: -XX:<name>=<value>
表示name屬性的值是value,例如:-XX:MaxGCPauseMillies=500
jps
jps默認(rèn)能夠看到所有的java進(jìn)程
-l
參數(shù)表示看到具體的Class
?。?!需要補(bǔ)全所有的參數(shù)
jinfo
jinfo -flag MaxHeapSize [pid]
看到所選擇pid的MaxHeapSize的值
jinfo -flags [pid]
看到所選pid的所有參數(shù)值,包括被修改的和沒有被修改過的
?。?!需要補(bǔ)全所有參數(shù)
jstat
Loaded
類加載的個(gè)數(shù)
Bytes
類加載了多少個(gè)kBs
Unloaded
類卸載的個(gè)數(shù)
Bytes
類卸載了多少個(gè)kBs
Time
類加載和卸載總共花費(fèi)的時(shí)間
Compiled
完成了多少個(gè)編譯的任務(wù)(把一個(gè)方法編譯成本地方法)
Failed
編譯任務(wù)失敗的次數(shù)
Invalid
編譯任務(wù)是無效的次數(shù)
Time
總的編譯時(shí)間
FailedType
上一次編譯失敗的編譯類型
FailedMethod
上一次編譯失敗的類名稱或方法名稱
S0C\S1C\S0U\S1U
S0和S1的總量和使用量
EC\EU
Eden區(qū)總量與使用量
OC\OU
Old區(qū)總量與使用量
MC\MU
Metaspace區(qū)總量和使用量
CCSC\CCSU
壓縮類空間總量和使用量
YGC\YGCT
YoungGC的次數(shù)和時(shí)間
FGC\FGCT
FullGC的次數(shù)和時(shí)間
GCT
總的GC時(shí)間
可以查看如下信息:
所有選項(xiàng):
-class
查看類裝載信息,用法 jstat -class [pid] [interval millseconds] [count]
代表間隔interval毫秒時(shí)間打印count次的pid的類裝載信息:
-compiler
查看JIT編譯的信息,jstat -compiler [pid] [interval millseconds] [count]
代表間隔interval毫秒時(shí)間打印count次的pid的JIT編譯信息信息:
-gc
查看垃圾收集的信息,用法 jstat -gc [pid] [interval millseconds] [count]
代表間隔interval毫秒時(shí)間打印count次的pid的gc信息:
-gcutil
-gccause
-gcnew
-gcold
-printcompilation
?。?!需要補(bǔ)全所有參數(shù)
類裝載信息
垃圾收集信息
JIT編譯信息
JVM的內(nèi)存結(jié)構(gòu)
堆區(qū):Young區(qū)(Servival區(qū)[S0+S1]+Eden區(qū)) + Old區(qū),S0和S1是一樣大的,在同一時(shí)間,S0和S1只會(huì)啟用一個(gè)
非堆區(qū)(Metaspace):操作系統(tǒng)的本地內(nèi)存,CCS區(qū)(啟用了短指針之后則存在)+CodeCache區(qū)(存放的是JIT的代碼信息,JNI的代碼信息也在這)
如何定位內(nèi)存溢出的問題
構(gòu)造一個(gè)內(nèi)存溢出,例如設(shè)置下-Xmx32M -Xms32M
,構(gòu)造一個(gè)堆內(nèi)存溢出,只需要一直不停的new對(duì)象;設(shè)置-XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M
下構(gòu)造出一個(gè)非堆內(nèi)存溢出,例如使用ASM不太的構(gòu)造Class文件。
內(nèi)存溢出的區(qū)別
C++內(nèi)存溢出主要是指丟失內(nèi)存指針,Java的內(nèi)存溢出主要是指一直占用對(duì)象不釋放
jmap
-dump:<dump-options>
options有:live
-僅僅導(dǎo)出存活的對(duì)象,format=b
-導(dǎo)出二進(jìn)制格式,file=<file>
代表導(dǎo)出的文件
可以手動(dòng)導(dǎo)出Heap日志
看完上述內(nèi)容,你們掌握J(rèn)ava中怎么監(jiān)控一個(gè)應(yīng)用的性能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。