<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JVM 常用命令行工具

          共 3479字,需瀏覽 7分鐘

           ·

          2021-01-06 15:04

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|? 低吟不作語(yǔ)

          來(lái)源 |? urlify.cn/Rz67bm

          76套java從入門到精通實(shí)戰(zhàn)課程分享

          一、基礎(chǔ)故障處理工具

          Java 開(kāi)發(fā)人員肯定都知道 JDK 的 bin 目錄下有許多小工具,這些小工具除了用于編譯和運(yùn)行 Java 程序外,打包、部署、簽名、調(diào)試、監(jiān)控、運(yùn)維等各種場(chǎng)景都可能會(huì)見(jiàn)到它們的影子

          本文主要介紹的是用于監(jiān)視虛擬機(jī)運(yùn)行狀態(tài)和進(jìn)行故障處理的工具,根據(jù)軟件可用性和授權(quán)的不同,可以分成三類:

          • 商業(yè)授權(quán)工具:主要是 JMC(Java Mission Control)及它要使用到的 JFR(Java Flight Recorder)。JMC 在個(gè)人開(kāi)發(fā)環(huán)境中使用是免費(fèi)的,但在商業(yè)環(huán)境中使用則需付費(fèi)

          • 正式支持工具:這一類工具屬于長(zhǎng)期被支持的工具

          • 實(shí)驗(yàn)性工具:這一類工具帶有實(shí)驗(yàn)性質(zhì),日后可能會(huì)轉(zhuǎn)正,也可能會(huì)在某個(gè) JDK 版本中無(wú)聲無(wú)息地消失


          二、虛擬機(jī)進(jìn)程狀況工具

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

          該命令可以獲取虛擬機(jī)進(jìn)程的 LVMID,從而定位想要監(jiān)控的程序,而 LVMID 一般與操作系統(tǒng)的進(jìn)程 ID 一致

          jps?[options]?[hostid]

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

          jps 的其他常用選項(xiàng)如表:

          選項(xiàng)作用
          -q只輸出 LVMID,省略主類的名稱
          -m輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)傳遞給主類 main() 函數(shù)的參數(shù)
          -l輸出主類的全名,如果進(jìn)程執(zhí)行的是 JAR 包,則輸出
          -v輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)的 JVM 參數(shù)


          三、虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具

          jstat(JVM Statistics Monitoring Tool)是用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具,可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類加載、內(nèi)存、垃圾收集、即時(shí)編譯等運(yùn)行時(shí)數(shù)據(jù)

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

          如果是本地虛擬機(jī)進(jìn)程,VMID 與 LVMID 是一致的;如果是遠(yuǎn)程虛擬機(jī)進(jìn)程,那 VMID 的格式應(yīng)當(dāng)是

          [protocaol:][//]lvmid[@hostname[:port]/servername]

          參數(shù) interval 和 count 代表查詢間隔和次數(shù),如果省略這兩個(gè)參數(shù),說(shuō)明只查詢一次。假設(shè)需要每 250 毫秒查詢一次進(jìn)程 2764 的垃圾收集情況,一共查詢 20 次,那命令應(yīng)當(dāng)是

          jstat?-gc?2764?250?20

          選項(xiàng) option 代表用戶希望查詢的虛擬機(jī)信息,主要分三類:類加載、垃圾收集、運(yùn)行期編譯狀況等

          選項(xiàng)作用
          -class監(jiān)視類加載、卸載數(shù)量、總空間以及類裝載所耗費(fèi)的時(shí)間
          -gc監(jiān)視 Java 堆狀況,包括 Eden 區(qū)、兩個(gè) Survivor 區(qū)、老年代、永久代等的容量、已用空間、垃圾收集時(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)致上一次垃圾收集產(chǎn)生的原因
          -gcnew監(jiān)視新生代垃圾收集情況
          -gcnewcapacity監(jiān)視內(nèi)容與 -gcnew 基本相同,但輸出主要關(guān)注使用到的最大、最小空間
          -gcold監(jiān)視老年代垃圾收集情況
          -gcoldcapacity監(jiān)視內(nèi)容與 -gcold 基本相同,但輸出主要關(guān)注使用到的最大、最小空間
          -gcpermcapacity輸出永久代使用到的最大、最小空間
          -compiler輸出即時(shí)編譯器編譯過(guò)的方法、耗時(shí)等信息
          -printcompilation輸出已經(jīng)被即時(shí)編譯的方法


          四、Java 配置信息工具

          jinfo(Configuration Info for Java)的作用是實(shí)時(shí)查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù),使用 jps 命令的 -v 參數(shù)可以查看虛擬機(jī)啟動(dòng)時(shí)顯示指定的參數(shù)列表,獲取 pid

          jinfo?[option]?pid

          使用 -flag 選項(xiàng)打印虛擬機(jī)標(biāo)記參數(shù)的值,name 表示虛擬機(jī)標(biāo)記參數(shù)的名稱

          jinfo?-flag?PrintGC?21768

          使用 -flag [+|-] 選項(xiàng)可以開(kāi)啟或關(guān)閉虛擬機(jī)表示參數(shù),+ 表示開(kāi)啟,- 表示關(guān)閉

          jinfo?-flag?+PrintGC?21768
          jinfo?-flag?-PrintGC?21768

          使用 -flag = 可以設(shè)置虛擬機(jī)標(biāo)記參數(shù)的值,但并不是每個(gè)參數(shù)都可以被動(dòng)態(tài)修改

          jinfo?-flag?HeapDumpPath=C:\error.hprof?21768

          剩下的常用選項(xiàng)如表

          選項(xiàng)作用
          -flags打印虛擬機(jī)參數(shù),如 -XX:NewSize
          no option不帶任何選項(xiàng)時(shí),會(huì)同時(shí)打印虛擬機(jī)參數(shù)和系統(tǒng)參數(shù)
          -sysprops打印系統(tǒng)參數(shù)
          -h | -help打印幫助信息


          五、Java 內(nèi)存映射工具

          jmap(Memory Map for Java)命令用于生成堆轉(zhuǎn)儲(chǔ)快照,還可以查詢 finalize 執(zhí)行隊(duì)列、Java 堆和方法區(qū)的詳細(xì)信息,如空間使用率、當(dāng)前用的是哪種收集器等

          jmap?[option]?vmid

          option 選項(xiàng)的合法值與具體含義

          選項(xiàng)作用
          -dump生成 Java 堆轉(zhuǎn)儲(chǔ)快照,格式為 -dump:[live,]format=b,file=,其中 live 子參數(shù)說(shuō)明是否只 dump 出存活的對(duì)象
          -finalizerinfo顯示在 F-Queue 中等待 Finalizer 線程執(zhí)行 finalize 方法的對(duì)象
          -heap顯示 Java 堆詳細(xì)信息,如使用哪種回收期、參數(shù)配置、分代狀況
          -histo顯示堆中對(duì)象統(tǒng)計(jì)信息,包括類、實(shí)例數(shù)量、合計(jì)容量
          -permstat以 ClassLoader 為統(tǒng)計(jì)口徑顯示永久代內(nèi)存狀態(tài)
          -F當(dāng)虛擬機(jī)進(jìn)程對(duì) -dump 選項(xiàng)沒(méi)有響應(yīng)時(shí),可使用該選項(xiàng)強(qiáng)制生成 dump 快照


          六、虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具

          JDK 提供 jhat(JVM Heap Analysis Tool)命令和 jmap 搭配使用,用來(lái)分析 jmap 生成的堆轉(zhuǎn)儲(chǔ)快照。不過(guò) jhat 的分析功能相等簡(jiǎn)陋,一般會(huì)使用其他功能更強(qiáng)大的分析工具

          jhat 內(nèi)置一個(gè)簡(jiǎn)單的 web 服務(wù)器,此命令執(zhí)行后,jhat 在命令行里顯示分析結(jié)果的訪問(wèn)地址,可以用 -port 選項(xiàng)指定端口

          有時(shí) dump 出來(lái)的堆很大,在啟動(dòng)時(shí)會(huì)報(bào)堆空間不足的錯(cuò)誤,可以使用如下參數(shù)

          jhat?-J-Xmx512m??#?這個(gè)內(nèi)存大小可根據(jù)自己電腦進(jìn)行設(shè)置

          七、Java 堆棧跟蹤工具

          jstack(Stack Trace for Java)命令用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照(一般稱為 threaddump 或 javacore 文件)。線程快照就是當(dāng)前虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的目的通常是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因,如線程間死鎖、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長(zhǎng)時(shí)間掛起等? ?

          jstack?[option]?vmid

          option 選項(xiàng)的合法值與具體含義如表

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

          從 JDK5 開(kāi)始,java.lang.Thread 類新增了一個(gè) getAllStackTraces() 方法用于獲取虛擬機(jī)中所有線程的 StackTraceElement 對(duì)象,使用這個(gè)方法可以完成 jstack 的大部分功能,在實(shí)際項(xiàng)目中可以調(diào)用這個(gè)方法做一個(gè)管理員頁(yè)面,隨時(shí)使用瀏覽器來(lái)查閱線程堆棧




          粉絲福利:Java從入門到入土學(xué)習(xí)路線圖

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒


          感謝點(diǎn)贊支持下哈?

          瀏覽 57
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操操久久 | 亚州欧美日韩 | 伊人九色在线 | 日韩av中文在线 日韩videos | 国产特级毛片AAAAAA喷潮 |