Java中怎么監(jiān)控一個應(yīng)用的性能,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的龍山網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
標準參數(shù)(Eg.)
-help
-server/-client
-version/-showversion
-cp/-classpath
X參數(shù)(非標準化參數(shù))
-Xint: 解釋執(zhí)行
-Xcomp: 第一次使用就編譯成本地代碼
-Xmixed: 混合模式,jvm自己來決定是否編譯成本地代碼
XX參數(shù)(非標轉(zhuǎn)化參數(shù),相對不穩(wěn)定,主要用于JVM調(diào)優(yōu)和Debug)
XX參數(shù)的分類:
-Xmx/-Xms
(實際上是XX參數(shù)) 設(shè)置JVM的最大內(nèi)存和最小內(nèi)存,-Xms等價于-XX:InitialHeapSize
,-Xmx等價于-XX:MaxHeapSize
-XX:+PrintFlagsInitial
查看JVM運行參數(shù)的初始值
-XX:+PrintFlagsFinal
查看JVM運行參數(shù)的最終值(=表示默認值,:=表示被用戶或者JVM修改后的值)
-XX:+UnlockExperimentalVMOptions
解鎖實驗參數(shù)
-XX:+UnlockDiagnosticVMOptions
解鎖診斷參數(shù)
-XX:+PrintCommandLineFlags
打印命令行參數(shù)
-XX:+HeapDumpOnOutOfMemoryError
當發(fā)生內(nèi)存溢出了,自動Dump Heap Error
-XX:HeapDumpPath=./
內(nèi)存溢出HeapDump的日志,./
指的是當前運行目錄
Boolean類型: -XX:[+|-]<name>
,例如: -XX:+UseConcMarkSweepGC
非Boolean類型: -XX:<name>=<value>
表示name屬性的值是value,例如:-XX:MaxGCPauseMillies=500
jps
jps默認能夠看到所有的java進程
-l
參數(shù)表示看到具體的Class
?。。⌒枰a全所有的參數(shù)
jinfo
jinfo -flag MaxHeapSize [pid]
看到所選擇pid的MaxHeapSize的值
jinfo -flags [pid]
看到所選pid的所有參數(shù)值,包括被修改的和沒有被修改過的
?。?!需要補全所有參數(shù)
jstat
Loaded
類加載的個數(shù)
Bytes
類加載了多少個kBs
Unloaded
類卸載的個數(shù)
Bytes
類卸載了多少個kBs
Time
類加載和卸載總共花費的時間
Compiled
完成了多少個編譯的任務(wù)(把一個方法編譯成本地方法)
Failed
編譯任務(wù)失敗的次數(shù)
Invalid
編譯任務(wù)是無效的次數(shù)
Time
總的編譯時間
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ù)和時間
FGC\FGCT
FullGC的次數(shù)和時間
GCT
總的GC時間
可以查看如下信息:
所有選項:
-class
查看類裝載信息,用法 jstat -class [pid] [interval millseconds] [count]
代表間隔interval毫秒時間打印count次的pid的類裝載信息:
-compiler
查看JIT編譯的信息,jstat -compiler [pid] [interval millseconds] [count]
代表間隔interval毫秒時間打印count次的pid的JIT編譯信息信息:
-gc
查看垃圾收集的信息,用法 jstat -gc [pid] [interval millseconds] [count]
代表間隔interval毫秒時間打印count次的pid的gc信息:
-gcutil
-gccause
-gcnew
-gcold
-printcompilation
?。。⌒枰a全所有參數(shù)
類裝載信息
垃圾收集信息
JIT編譯信息
JVM的內(nèi)存結(jié)構(gòu)
堆區(qū):Young區(qū)(Servival區(qū)[S0+S1]+Eden區(qū)) + Old區(qū),S0和S1是一樣大的,在同一時間,S0和S1只會啟用一個
非堆區(qū)(Metaspace):操作系統(tǒng)的本地內(nèi)存,CCS區(qū)(啟用了短指針之后則存在)+CodeCache區(qū)(存放的是JIT的代碼信息,JNI的代碼信息也在這)
如何定位內(nèi)存溢出的問題
構(gòu)造一個內(nèi)存溢出,例如設(shè)置下-Xmx32M -Xms32M
,構(gòu)造一個堆內(nèi)存溢出,只需要一直不停的new對象;設(shè)置-XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M
下構(gòu)造出一個非堆內(nèi)存溢出,例如使用ASM不太的構(gòu)造Class文件。
內(nèi)存溢出的區(qū)別
C++內(nèi)存溢出主要是指丟失內(nèi)存指針,Java的內(nèi)存溢出主要是指一直占用對象不釋放
jmap
-dump:<dump-options>
options有:live
-僅僅導(dǎo)出存活的對象,format=b
-導(dǎo)出二進制格式,file=<file>
代表導(dǎo)出的文件
可以手動導(dǎo)出Heap日志
看完上述內(nèi)容,你們掌握Java中怎么監(jiān)控一個應(yīng)用的性能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
標題名稱:Java中怎么監(jiān)控一個應(yīng)用的性能
文章源于:http://m.rwnh.cn/article30/jepopo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、服務(wù)器托管、虛擬主機、網(wǎng)頁設(shè)計公司、全網(wǎng)營銷推廣、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)