溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中怎么監(jiān)控一個(gè)應(yīng)用的性能

發(fā)布時(shí)間:2021-07-01 14:59:28 來源:億速云 閱讀:168 作者:Leah 欄目:大數(shù)據(jù)

Java中怎么監(jiān)控一個(gè)應(yīng)用的性能,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

JVM的參數(shù)類型
  1. 標(biāo)準(zhǔn)參數(shù)(Eg.)

    1. -help

    2. -server/-client

    3. -version/-showversion

    4. -cp/-classpath

  2. X參數(shù)(非標(biāo)準(zhǔn)化參數(shù))

    1. -Xint: 解釋執(zhí)行

    2. -Xcomp: 第一次使用就編譯成本地代碼

    3. -Xmixed: 混合模式,jvm自己來決定是否編譯成本地代碼

  3. XX參數(shù)(非標(biāo)轉(zhuǎn)化參數(shù),相對(duì)不穩(wěn)定,主要用于JVM調(diào)優(yōu)和Debug)

    • XX參數(shù)的分類:

    1. -Xmx/-Xms(實(shí)際上是XX參數(shù)) 設(shè)置JVM的最大內(nèi)存和最小內(nèi)存,-Xms等價(jià)于-XX:InitialHeapSize,-Xmx等價(jià)于-XX:MaxHeapSize

    2. -XX:+PrintFlagsInitial 查看JVM運(yùn)行參數(shù)的初始值

    3. -XX:+PrintFlagsFinal 查看JVM運(yùn)行參數(shù)的最終值(=表示默認(rèn)值,:=表示被用戶或者JVM修改后的值)

    4. -XX:+UnlockExperimentalVMOptions 解鎖實(shí)驗(yàn)參數(shù)

    5. -XX:+UnlockDiagnosticVMOptions 解鎖診斷參數(shù)

    6. -XX:+PrintCommandLineFlags 打印命令行參數(shù)

    7. -XX:+HeapDumpOnOutOfMemoryError 當(dāng)發(fā)生內(nèi)存溢出了,自動(dòng)Dump Heap Error

    8. -XX:HeapDumpPath=./ 內(nèi)存溢出HeapDump的日志,./指的是當(dāng)前運(yùn)行目錄

    9. Boolean類型: -XX:[+|-]<name>,例如: -XX:+UseConcMarkSweepGC

    10. 非Boolean類型: -XX:<name>=<value>表示name屬性的值是value,例如:-XX:MaxGCPauseMillies=500

  4. jps

    • jps默認(rèn)能夠看到所有的java進(jìn)程

    • -l參數(shù)表示看到具體的Class

    • ?。?!需要補(bǔ)全所有的參數(shù)

  5. jinfo

    • jinfo -flag MaxHeapSize [pid]看到所選擇pid的MaxHeapSize的值

    • jinfo -flags [pid]看到所選pid的所有參數(shù)值,包括被修改的和沒有被修改過的

    • ?。?!需要補(bǔ)全所有參數(shù)

  6. 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):

    1. -class 查看類裝載信息,用法 jstat -class [pid] [interval millseconds] [count] 代表間隔interval毫秒時(shí)間打印count次的pid的類裝載信息:

    2. -compiler 查看JIT編譯的信息,jstat -compiler [pid] [interval millseconds] [count]代表間隔interval毫秒時(shí)間打印count次的pid的JIT編譯信息信息:

    3. -gc 查看垃圾收集的信息,用法 jstat -gc [pid] [interval millseconds] [count] 代表間隔interval毫秒時(shí)間打印count次的pid的gc信息:

    4. -gcutil

    5. -gccause

    6. -gcnew

    7. -gcold

    8. -printcompilation

    9. ?。?!需要補(bǔ)全所有參數(shù)

    10. 類裝載信息

    11. 垃圾收集信息

    12. JIT編譯信息

  7. JVM的內(nèi)存結(jié)構(gòu)

    1. 堆區(qū):Young區(qū)(Servival區(qū)[S0+S1]+Eden區(qū)) + Old區(qū),S0和S1是一樣大的,在同一時(shí)間,S0和S1只會(huì)啟用一個(gè)

    2. 非堆區(qū)(Metaspace):操作系統(tǒng)的本地內(nèi)存,CCS區(qū)(啟用了短指針之后則存在)+CodeCache區(qū)(存放的是JIT的代碼信息,JNI的代碼信息也在這)

  8. 如何定位內(nèi)存溢出的問題

    1. 構(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文件。

  9. 內(nèi)存溢出的區(qū)別

    • C++內(nèi)存溢出主要是指丟失內(nèi)存指針,Java的內(nèi)存溢出主要是指一直占用對(duì)象不釋放

  10. jmap

    • -dump:<dump-options> options有:live-僅僅導(dǎo)出存活的對(duì)象,format=b-導(dǎo)出二進(jìn)制格式,file=<file>代表導(dǎo)出的文件

    1. 可以手動(dòng)導(dǎo)出Heap日志


看完上述內(nèi)容,你們掌握J(rèn)ava中怎么監(jiān)控一個(gè)應(yīng)用的性能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI