JVM 常用命令行工具

2021-02-16 java1234

點擊上方藍色字體,選擇「標星公眾號」

優質文章,第一時間送達

  作者 |  低吟不作語

來源 |  urlify.cn/Rz67bm

76套java從入門到精通實戰課程分享

一、基礎故障處理工具

Java 開發人員肯定都知道 JDK 的 bin 目錄下有許多小工具,這些小工具除了用於編譯和運行 Java 程序外,打包、部署、籤名、調試、監控、運維等各種場景都可能會見到它們的影子

本文主要介紹的是用於監視虛擬機運行狀態和進行故障處理的工具,根據軟體可用性和授權的不同,可以分成三類:

二、虛擬機進程狀況工具

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

該命令可以獲取虛擬機進程的 LVMID,從而定位想要監控的程序,而 LVMID 一般與作業系統的進程 ID 一致

jps 也可以通過 RMI 協議查詢開啟了 RMI 服務的遠程 Java 虛擬機進程狀態,參數 hostid 為 RMI 註冊表中註冊的主機名

jps 的其他常用選項如表:

選項作用-q只輸出 LVMID,省略主類的名稱-m輸出虛擬機進程啟動時傳遞給主類 main() 函數的參數-l輸出主類的全名,如果進程執行的是 JAR 包,則輸出-v輸出虛擬機進程啟動時的 JVM 參數三、虛擬機統計信息監視工具

jstat(JVM Statistics Monitoring Tool)是用於監視虛擬機各種運行狀態信息的命令行工具,可以顯示本地或者遠程虛擬機進程中的類加載、內存、垃圾收集、即時編譯等運行時數據

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

如果是本地虛擬機進程,VMID 與 LVMID 是一致的;如果是遠程虛擬機進程,那 VMID 的格式應當是

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

參數 interval 和 count 代表查詢間隔和次數,如果省略這兩個參數,說明只查詢一次。假設需要每 250 毫秒查詢一次進程 2764 的垃圾收集情況,一共查詢 20 次,那命令應當是

選項 option 代表用戶希望查詢的虛擬機信息,主要分三類:類加載、垃圾收集、運行期編譯狀況等

選項作用-class監視類加載、卸載數量、總空間以及類裝載所耗費的時間-gc監視 Java 堆狀況,包括 Eden 區、兩個 Survivor 區、老年代、永久代等的容量、已用空間、垃圾收集時間合計等信息-gccapacity監視內容與 -gc 基本相同,但輸出主要關注 Java 堆各個區域使用到的最大、最小空間-gcutil監視內容與 -gc 基本相同,但輸出主要關注已使用空間佔總空間的百分比-gccause與 -gcutil 功能一樣,但會額外輸出導致上一次垃圾收集產生的原因-gcnew監視新生代垃圾收集情況-gcnewcapacity監視內容與 -gcnew 基本相同,但輸出主要關注使用到的最大、最小空間-gcold監視老年代垃圾收集情況-gcoldcapacity監視內容與 -gcold 基本相同,但輸出主要關注使用到的最大、最小空間-gcpermcapacity輸出永久代使用到的最大、最小空間-compiler輸出即時編譯器編譯過的方法、耗時等信息-printcompilation輸出已經被即時編譯的方法四、Java 配置信息工具

jinfo(Configuration Info for Java)的作用是實時查看和調整虛擬機各項參數,使用 jps 命令的 -v 參數可以查看虛擬機啟動時顯示指定的參數列表,獲取 pid

使用 -flag <name> 選項列印虛擬機標記參數的值,name 表示虛擬機標記參數的名稱

jinfo -flag PrintGC 21768

使用 -flag [+|-]<name> 選項可以開啟或關閉虛擬機表示參數,+ 表示開啟,- 表示關閉

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

使用 -flag <name> = <value> 可以設置虛擬機標記參數的值,但並不是每個參數都可以被動態修改

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

剩下的常用選項如表

選項作用-flags列印虛擬機參數,如 -XX:NewSizeno option不帶任何選項時,會同時列印虛擬機參數和系統參數-sysprops列印系統參數-h | -help列印幫助信息五、Java 內存映射工具

jmap(Memory Map for Java)命令用於生成堆轉儲快照,還可以查詢 finalize 執行隊列、Java 堆和方法區的詳細信息,如空間使用率、當前用的是哪種收集器等

option 選項的合法值與具體含義

選項作用-dump生成 Java 堆轉儲快照,格式為 -dump:[live,]format=b,file=<filename>,其中 live 子參數說明是否只 dump 出存活的對象-finalizerinfo顯示在 F-Queue 中等待 Finalizer 線程執行 finalize 方法的對象-heap顯示 Java 堆詳細信息,如使用哪種回收期、參數配置、分代狀況-histo顯示堆中對象統計信息,包括類、實例數量、合計容量-permstat以 ClassLoader 為統計口徑顯示永久代內存狀態-F當虛擬機進程對 -dump 選項沒有響應時,可使用該選項強制生成 dump 快照六、虛擬機堆轉儲快照分析工具

JDK 提供 jhat(JVM Heap Analysis Tool)命令和 jmap 搭配使用,用來分析 jmap 生成的堆轉儲快照。不過 jhat 的分析功能相等簡陋,一般會使用其他功能更強大的分析工具

jhat 內置一個簡單的 web 伺服器,此命令執行後,jhat 在命令行裡顯示分析結果的訪問地址,可以用 -port 選項指定埠

有時 dump 出來的堆很大,在啟動時會報堆空間不足的錯誤,可以使用如下參數

jhat -J-Xmx512m <heap dump file> # 這個內存大小可根據自己電腦進行設置

七、Java 堆棧跟蹤工具

jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照(一般稱為 threaddump 或 javacore 文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的目的通常是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間掛起等   

option 選項的合法值與具體含義如表

選項作用-F當正常輸出的請求不被響應時,強制輸出線程堆棧-l除堆棧外,顯示關於鎖的附加信息-m如果調用到本地方法的話,可以顯示 C/C++ 的堆棧

從 JDK5 開始,java.lang.Thread 類新增了一個 getAllStackTraces() 方法用於獲取虛擬機中所有線程的 StackTraceElement 對象,使用這個方法可以完成 jstack 的大部分功能,在實際項目中可以調用這個方法做一個管理員頁面,隨時使用瀏覽器來查閱線程堆棧

粉絲福利:Java從入門到入土學習路線圖

👇👇👇

感謝點讚支持下哈 

相關焦點

  • JVM命令使用演示
    ,但是不知道如何使用那些命令。就著這個前提,簡單演示一下jvm一些命令的使用。(溫馨提示,由於jvm命令返回的字符串偏長一些,手機上效果差一些,建議在電腦上看)首先,先準備一段代碼,直接運行一個java程序也可以,比如:@Slf4jpublic class SearchBusiestCPU { public static void main(String[] args) { for (int
  • 最常用的20個監控Linux系統性能的命令行工具
    為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • K8s之kubectl命令行工具常用命令
    Kubectl是管理k8s集群的命令行工具,通過生成的json格式傳遞給apiserver進行創建、查看、管理的操作常用命令行
  • 18個Linux命令行工具
    基於此原因,我們已編寫了最常使用的18個命令行工具列表,這些工具將有助於每個Linux/Unix 系統管理員的工作。這些命令行工具可以在各種Linux系統下使用,可以用於監控和查找產生性能問題的原因。這個命令行工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。
  • Java 虛擬機學習(4):JDK 可視化監控工具
    JDK/bin目錄下,啟動JConsole後,將自動搜索本機運行的jvm進程,不需要jps命令來查詢指定。雙擊其中一個jvm進程即可開始監控,也可使用「遠程進程」來連接遠程伺服器。進入JConsole主界面,有「概述」、「內存」、「線程」、「類」、「VM摘要」和」Mbean」六個頁籤:
  • Linux伺服器常用命令
    命令行模式下的常用命令:                【1】控制光標移動:↑,↓,j               【2】刪除當前行:dd               【3】查找:/字符             【4】進入編輯模式:i o a            【5】進入底行模式::
  • 20個命令行工具監控 Linux 系統性能
    為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • JVM系列(一):jvm啟動過程速覽
    main.c是jvm的唯一main方法入口,其中,jdk被編譯出來之後,會有許多的工作箱,如jmap,jps,jstack.... 這些工具箱的入口,實際也是這個main, 只是它們包含了不同的子模塊,從而達到不同工具的目的。main.c的內容也不多,主要它也只是一個框架,為屏蔽各系統的差異。
  • Java 故障處理工具
    1 JDK常用命令1.1 jsp命令jps虛擬機進程狀態工具。具體的執行結果如下:
  • FFmpeg常用命令行
    本文收集記錄了筆者使用過的FFmpeg命令,親測可用,並不是簡單的copy別人的FFmpeg大全,下面的命令大部分都是本人測試成功過的
  • 命令行基礎工具的更佳替代品
    命令行聽起來有時候會很嚇人,特別是在剛剛接觸的時候,你甚至可能做過有關命令行的噩夢。
  • 比 man 更強悍的命令行工具 cheat
    奈何命令行參數太多,記不住怎麼辦?就是這個更強壯的男人 tldr,它一個命令行工具,直接使用 npm install -g tldr 來安裝。,常用的curl命令都包括了,我喜歡。image.png有了tldr和cheat,再也不用記那麼多命令行參數了。
  • Java 中 JDK、JRE 和 JVM 的區別和聯繫.
    JRE的簡介JRE是Java Runtime Environment的簡稱,是Java運行環境,是讓作業系統運行Java應用程式的環境,其內部包含JVM,也就是說JRE只負責對已經存在的Java源程序進行運行的操作,它不包含開發工具JDK,對JDK內部的編譯器、調試器和其它工具均不包含。3.
  • 工具| vim, mac 命令行終端快捷鍵
    作為運維人員使用mac 系統時,每天都需要和shell 命令行打交道,這裡總結一些常見的命令,以便提高我們的工作效率。mac shell 終端常用快捷鍵ctrl + h        退格刪除一個字符,相當於通常的Backspace鍵ctrl + u        刪除光標之前到行首的字符 ,我自己測試mac上是刪除整行記錄。
  • Logcat命令行工具
    這裡先說一下logcat先給官方定義Logcat 是一個命令行工具,用於轉儲系統消息日誌,包括設備拋出錯誤時的堆棧軌跡,以及從您的應用中使用 Log 類寫入的消息。代碼位置:system/core/logcat/,可執行文件位於:/system/bin/logcat,每次執行adb logcat命令後,系統會新起一個logcat進程,用來處理命令,父進程是adbd進程。adb logcat命令退出後,進程退出。
  • 常用windows命令
    常用windows命令Windows命令提示符(cmd.exe)是Windows  NT下的一個用於運行Windows控制臺程序或某些DOS程序的
  • 用Click編寫Python命令行工具
    這意味著很大一部分Python代碼被編寫為腳本和命令行界面(CLI)。構建這些命令行界面和工具是非常強大的,因為它使得幾乎所有的東西都可以自動化。 因此,隨著時間的推移,CLI可能變得相當複雜。通常從一個非常簡單的腳本開始,運行這些python代碼來完成一件特定的事情。
  • ADB常用命令
    ADB,即 Android Debug Bridge 是一種允許模擬器或已連接的 Android 設備進行通信的命令行工具,它可為各種設備操作提供便利
  • ffmpeg常用命令集錦
    在實際工作中,通常需要ffmpeg作為工具來驗證一個問題,比如播放一個視頻,提取一個碼流,轉碼視頻,轉封格式等,用的時候才發現忘記了相關命令,Google