Java虛擬機常用的性能監控工具

2021-02-16 小諸葛的博客
jps(虛擬機進程狀況工具)

jps(JVM Process Status Tool)是JDK中的一個小工具,它的功能和UNIX的ps命令類似:可以列出正在運行的虛擬機進程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一ID(LVMID,Local Virtual Machine Identifier),LVMID和作業系統的進程ID是一致的,當同時啟動多個虛擬機進程,無法根據進程名稱進行定位時,就可以使用jps命令顯示主類的功能來區分。

jps命令格式:

jps [options]   [hostid]

jps使用示例:

jps還可以通過RMI協議查詢開啟了RMI服務的遠程虛擬機進程狀態,參數hostid為RMI註冊表中註冊的主機名,jps的其他常用選項如下:

-q   只輸出LVMID,省略主類的名稱

-m  輸出虛擬機進程啟動時傳遞給主類main()函數的參數

-l  輸出主類的全名,如果進程執行的是jar包,則輸出JAR路徑

-v  輸出虛擬機進程啟動時的JVM參數

jstat(虛擬機統計信息監視工具)

jstat(JVM Statistics Monitoring Tool)是用於監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或遠程虛擬機進程中的類加載、內存、垃圾收集、即時編譯器等運行時數據,由於伺服器一般都是沒有GUI界面的,因此可以使用此工具定位性能問題。

jstat命令格式為:

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

對於命令格式中的VMID需要注意的是:如果是本地虛擬機進程,VMID就是LVMID,對於遠程虛擬機進程,那麼VMID的格式就是:

[protocol:] [//]vmid [@hostname[:port] /servername]

參數interval和count代表查詢間隔和查詢次數,如果省略了,則表示只查詢一次。假設每2000毫秒查詢進程16656新生代垃圾收集情況,一共查詢10次,則命令應當是:

jstat -gcnew 16656 2000 10

查詢示例:

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

-class  監視類加載、卸載數量、總空間以及類裝載所耗費的時間

-gc  監視Java堆狀況,包括Eden區、2個Survivor區、老年代、元空間等的容量,已用空間,垃圾收集時間合計等信息

-gccapacity  監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間

-gcutil  監視內容與-gc基本相同,但輸出主要關注一使用空間佔總空間的百分比

-gccause  與-gcutil功能一樣,但是會額外輸出導致上一次垃圾收集產生的原因

-gcnew  監視新生代垃圾收集情況

-gcnewcapacity  監視內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間

-gcold  監視老年代垃圾收集情況

-gcoldcapacity  監視內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間

-gcmetacapacity  輸出原空間使用到的最大、最小空間

-compiler  輸出即時編譯器編譯過的方法、耗時等信息

-printcompilation  輸出已經被即時編譯的方法

jmap(Java內存映像工具)

jmap(Memory Map for Java)命令用於生成堆轉儲快照(一般稱為heapdump或dump文件)。如果不使用jmap命令,也可以在啟動虛擬機時添加-XX:HeapDumpOnOutOfMemoryError參數,當虛擬機發生內存溢出異常之後就會自動生成堆轉儲快照文件;通過添加-XX:HeapDumpOnCtrlBreak參數,可以使用[Ctrl]+[Break]鍵讓虛擬機生成堆轉儲快照文件。此外,在Linux系統下,通過發送kill -3命令發送進程退出信號「恐嚇」一下虛擬機,也能拿到堆轉儲快照。

jmap命令不僅能獲取堆轉儲快照,還可以查詢finalize執行隊列、Java堆和方法區的詳細信息,如空間使用率、當前使用到時哪種垃圾收集器等。在Windows下,僅-dump和-histo選項可以使用,其餘的在Linux/Solaris平臺下才有效。

jmap的命令格式:

jmap  [option]  vmid

option選項的合法值和含義如下:

-dump  生成Java堆轉儲快照。格式為-dump:[live,]format=b,file=<filename>,其中live子參數說明是否只dump出存活的對象

-finalizerinfo  顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。只在Linux/Solaris平臺下有效。

-heap  顯示Java堆詳細信息,如使用哪種垃圾收集器、參數配置、分代狀況等。只在Linux/Solaris平臺下有效。

-histo  顯示堆中對象統計信息,包括類、實例數量、合計容量。

-permstat  以ClassLoader為統計口徑顯示永久代內存狀態。只在Linux/Solaris平臺下有效。

-F  當虛擬機進程堆-dump選項沒有響應時,可使用這個選項強制生成dump快照。只在Linux/Solaris平臺下有效。

使用示例:

相關焦點

  • 深入理解Java虛擬機-如何利用 JDK 自帶的命令行工具監控上百萬的高並發的虛擬機性能
    虛擬機系列文章在前面的幾篇文章已經講解了利用一些可視化的工具進行 JVM 性能的監控,但是,在伺服器上,我們很多時候是沒有辦法使用可視化的界面進行這種工作的,這種情景就相當於你需要遠程的 linux 系統一樣,我們沒有其他的辦法,只有一種辦法就是利用命令行進行操控,而當我們將我們的項目部署到遠程的伺服器上的時候,我們是沒有辦法利用可視化的工具對
  • Java 故障處理工具
    1 JDK常用命令1.1 jsp命令jps虛擬機進程狀態工具。具體的執行結果如下:
  • Java 虛擬機學習(4):JDK 可視化監控工具
    雙擊其中一個jvm進程即可開始監控,也可使用「遠程進程」來連接遠程伺服器。進入JConsole主界面,有「概述」、「內存」、「線程」、「類」、「VM摘要」和」Mbean」六個頁籤:內存頁籤相當於jstat命令,用於監視收集器管理的虛擬機內存(Java堆和永久代)變化趨勢,還可在詳細信息欄觀察全部GC執行的時間及次數。
  • 推薦:排查Java應用線上問題工具匯總.
    Java虛擬機自帶了很多工具,其中就有我們比較熟悉的javac和java,除此之外,我們還得掌握一類用於線上問題排查的工具,比如jstack, jmap, jstat等,通過這些工具我們可以深入了解JVM當下正在幹什麼事。
  • JVM 常用命令行工具
    從入門到精通實戰課程分享一、基礎故障處理工具Java 開發人員肯定都知道 JDK 的 bin 目錄下有許多小工具,這些小工具除了用於編譯和運行 Java 程序外,打包、部署、籤名、調試、監控、運維等各種場景都可能會見到它們的影子本文主要介紹的是用於監視虛擬機運行狀態和進行故障處理的工具,根據軟體可用性和授權的不同,可以分成三類
  • 深入理解 Java 虛擬機(第一彈) - Java 內存區域透徹分析
    計數器記錄的是正在執行的虛擬機字節碼指令的地址。計數器為空(Undefined),因為native方法是java通過JNI直接調用本地C/C++庫,可以近似的認為native方法相當於C/C++暴露給java的一個接口,java通過調用這個接口從而調用到C/C++方法。
  • 最常用的20個監控Linux系統性能的命令行工具
    我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行。為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • Java工程師成神之路~
    內存分配策略、垃圾收集器(G1)、GC算法、GC參數、對象存活的判定JVM參數及調優Java對象模型oop-klass、對象頭HotSpot即時編譯器、編譯優化類加載機制classLoader、類加載過程、雙親委派(破壞雙親委派)、模塊化(jboss modules、osgi、jigsaw)虛擬機性能監控與故障處理工具
  • 理解Java和Android虛擬機
    將源碼編譯成字節碼class字節碼java的字節碼文件是通過java編譯器來生成的,我們下載jdk後,通過javac命令,就可以將一個java源文件生成java字節碼文件,這個字節碼文件就可以直接在JVM上面運行了。
  • 有了這款可視化工具,Java 應用性能調優超簡單!
    VisualVM 提供了一個可視界面,用於查看 Java 虛擬機 (Java Virtual Machine, JVM) 上運行的基於 Java 技術的應用程式的詳細信息。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟體相關數據進行組織,並通過一種使您可以快速查看有關多個 Java 應用程式的數據的方式提供該信息。
  • Linux 下 CPU 監控工具
    01. toptop是最常用的查看系統資源使用情況的工具,包括CPU、內存等等資源。
  • 20個命令行工具監控 Linux 系統性能
    我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行。為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • 性能測試系統監控
    -場景設計2、性能測試的重要意義3、性能分析流程及方法4、應用系統性能調優之性能分析top(topas),vmstat,iostat在linux和AIX作業系統下顯示情況詳細列出各命令常用參數,在自己的虛擬機上實驗,要求把每行沒列的信息解釋清楚,還有不同作業系統平臺下命令的不同之處。
  • jdk自帶監控程序jvisualvm的使用
    java 進程的opts。jps:與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。jstat:一個極強的監視VM內存工具。可以用來監視VM內存內的各種堆和非堆的大小及其內存使用量。
  • 自從學會 JMX 監控和管理 Java 程序,睡得真香!
    Java Management Extensions(JMX)技術是 Java SE 平臺的標準功能,提供了一種簡單的、標準的監控和管理資源的方式,對於如何定義一個資源給出了明確的結構和設計模式,主要用於監控和管理 Java 應用程式運行狀態、設備和資源信息、Java 虛擬機運行情況等信息。
  • Java 那些最常用的工具類庫 | 原力計劃
    Apache CommonsApache Commons有很多子項目,常用的項目如下:String, String> map = BeanUtils.describe(user);BeanUtils.populate(user, map);我們將對象放在緩存中通常用redis中的hash,如下:hset student name testhset student age 10這種場景下map和bean的互相轉換的工具類就特別有用
  • JVM-JConsole:Java監視與管理控制臺(windows)
    上文:JVM-基於服務性代理的調試工具JHSDB(windows)JConsole
  • 一文帶你深入拆解Java虛擬機
    其實,「為什麼學 Java 虛擬機」這個問題,就和「為什麼要學習數據結構和算法」是一個道理:工欲善其事,必先利其器。可以說,Java 虛擬機就是每一位 Java 工程師進階加薪的利器,你想往上升,你想深入技術,不想一直停留在簡單開發,或者你在做 Java 性能分析、調優工作時,那麼,Java 虛擬機絕對是一把助力的利劍。
  • 值得收藏的 14 個 Linux 下 CPU 監控工具
    作者:Arnold Lu | 編輯:dog250來源:urlify.cn/Y7FFrq那些超有趣的Linux命令——第一彈那些超有趣的Linux命令——第二彈01. toptop是最常用的查看系統資源使用情況的工具
  • linux系統性能監控工具Netdata
    性能測試過程中監控系統的CPU、內存、帶寬等指標是必須,以前一直使用nmon這款linux系統監控工具進行性能測試過程中的系統監控