8款JVM性能調優監控工具(提高開發效率)

2020-12-22 愚公要移山1

在平時的開發當中我們總是會遇到各種各樣的問題,比如說內存洩漏、死鎖、CPU等。遇到問題不可怕,關鍵是我們如何去排查這些錯誤,對症下藥才是根本。不過對於很多人來說,往往找不到這些問題的根本所在,因此這篇文章主要是讓我們掌握一些工具來分析到底是哪裡出現了問題。

在之前的文章中,主要是分析了JVM的內存結構、類加載機制和垃圾回收機制。文章的順序也是循序漸進的,從這篇文章當中我們主要是分析JDK自帶的工具,把理論應用於實踐。

首先我們先對幾種要講的工具進行一個概述,然後再分別分析:

一、性能監控工具概述

工具主要是為了解決問題而生的,就是由於我們的程序存在著一些性能問題,才有了這些工具。其實當我們在下載完成JDK之後,那些工具就被SUN公司隨之送給我們了。

我們可以在我們的JDK安裝目錄,下看看會有很多這樣的工具。

我們會發現很多這樣的exe文件,這裡面有很多都是性能監控工具。我們就抽出來幾個進行講解。

常見的幾個工具都已經列出來了,還有一些其他的工具,其實用起來比JDK自帶的還要好,我會在今後的文章中列出來。OK,我們就一個一個去分析一下這些工具是幹嘛的,以及如何去使用的。

二、工具

1、jps:虛擬機進程狀況工具

jps主要用來輸出JVM中運行的進程狀態信息。語法格式如下:

jps [options] [hostid]

第一個參數:options

-q 不輸出類名、Jar名和傳入main方法的參數-m 輸出傳入main方法的參數-l 輸出main類或Jar的全限名-v 輸出傳入JVM的參數

第二個參數:hostid

主機或者是伺服器的id,如果不指定,就默認為當前的主機或者是伺服器。

我是在Windows10系統下測試的,當然你可以在linux下試驗,方式是一樣的,結果可能有不同。你可以選擇不同的參數選項來進行測試。打開CMD輸入相應命令

2、jstack:堆棧跟蹤工具

jstack用於生成虛擬機當前時刻的線程快照。語法格式如下:

jstack [option] vmid

第一個參數:option

第二個參數:vmid

vmid是Java虛擬機ID,在Linux/Unix系統上一般就是進程ID。

我們直接在CMD中操作一下:

3、jstat:虛擬機統計信息監控工具

jstat監視虛擬機各種運行狀態信息,可以顯示本地或者是遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。語法格式如下:

jstat [ generalOption | outputOptions vmid [interval] [count]] ]

第一個參數:generalOption | outputOptions

這個參數表示的option,代表著用戶希望查詢的虛擬機信息,分為類加載、垃圾收集、運行期編譯狀況3類。

第二個參數:vmid

vmid是Java虛擬機ID,在Linux/Unix系統上一般就是進程ID。

第三個參數:interval

interval是採樣時間間隔,

第四個參數:count

count表示的是採樣數。

下面我們就是用一下這個工具,打開我們的CMD,輸入相應的命令:

4、jinfo:實時地查看和調整虛擬機各項參數

命令格式:

jinfo [option] pid

第一個參數:option

第二個參數:pid

指定顯示的進程id。

在CMD中進行測試:

5、jmap:生成虛擬機的內存轉儲快照(heapdump文件)

jmap(Memory Map for Java,內存映像工具),用於生成堆轉存的快照,一般是heapdump或者dump文件。如果不適用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError參數,當虛擬機發生內存溢出的時候可以產生快照。或者使用kill -3 pid也可以產生。jmap的作用並不僅僅是為了獲取dump文件,它可以查詢finalize執行隊列,java堆和永久代的詳細信息,如空間使用率,當前用的哪種收集器。命令格式如下:

jmap [option] vmid

第一個參數:

第二個參數:vmid

vmid是Java虛擬機ID,在Linux/Unix系統上一般就是進程ID.

在cmd中測試:

6、jhat:分析內存轉儲快照,不推薦使用,而且慢

由於這個工具功能比較簡陋,運行起來也比較耗時,所以這個工具不推薦使用,推薦使用MAT。

7、JConsole:JMX的可視化管理工具

這個工具相比較前面幾個工具,使用率比較高,很重要。它是一個java GUI監視工具,可以以圖表化的形式顯示各種數據。並可通過遠程連接監視遠程的伺服器VM。用java寫的GUI程序,用來監控VM,並可監控遠程的VM,非常易用,而且功能非常強。

在cmd裡面輸入 jconsole,選則進程就可以了。(前提是在IDE工具先建立一個線程運行著)

然後我們選擇了相應的選項之後,進入這個工具就會出現下面這個界面

在上面有菜單,我們可以選擇其中一個進行查看,就可以了,這個用具用起來很方便,也是我之前用的比較多的工具。

8、VisualVM:多合一故障管理工具

這個工具也很牛bility。它同jconsole都是一個基於圖形化界面的、可以查看本地及遠程的JAVA GUI監控工具,Jvisualvm同jconsole的使用方式一樣,直接在命令行打入jvisualvm即可啟動,jvisualvm界面更美觀一些,數據更實時:

最上面也有菜單,你可以選擇不同的選項來展示。自己動手試一遍是最好的。

三、總結

這些工具就先寫這麼多,在文章一開始我們其實已經發現了,jdk自帶的工具那是超級的多,而且隨著jdk版本的不斷更新,工具還有不斷加強增多的趨勢,想要每一個都掌握那太費時間了,我們遇到哪些問題去搜索一下,看看能用到哪些工具就可以了,列出的這幾種工具,對於初學者來說還是比較適用的。

謝謝大家,如有問題還請批評指正。

相關焦點

  • JVM性能調優實踐
    程序在上線前的測試或運行中有時會出現一些大大小小的JVM問題,比如cpu load過高、請求延遲、tps降低等,甚至出現內存洩漏(每次垃圾收集使用的時間越來越長,垃圾收集頻率越來越高,每次垃圾收集清理掉的垃圾數據越來越少)、內存溢出導致系統崩潰,因此需要對JVM進行調優,使得程序在正常運行的前提下,獲得更高的用戶體驗和運行效率。
  • 5款強大的JVM 性能調優監控工具 !
    、維護中,有時候我們會碰到下面這些問題:這些問題在日常開發、維護中可能被很多人忽視(比如有的人遇到上面的問題只是重啟伺服器或者調大內存,而不會深究問題根源),但能夠理解並解決這些問題是Java程式設計師進階的必備要求。
  • JVM調優參數、方法、工具以及案例總結
    主要圍繞四個大的方面展開,分別是JVM調優參數、JVM調優方法(流程)、JVM調優工具、JVM調優案例,調優案例目前正在分析,會在將來補上。對於年老代比較多的應用,可以提高效率.如果將此值設置為一個較大值,則年輕代對象會在Survivor區進行多次複製,這樣可以增加對象再年輕代的存活 時間,增加在年輕代即被回收的概率 該參數只有在串行GC時才有效.
  • JVM之jvisualvm的簡單使用
    推薦閱讀•JVM之jconsole的簡單使用•性能優化-VisualVM工具的使用[3]•利用jvisualvm分析JVM,進行性能調優[4]•jvisualvm連接遠程應用終於成功,附踩大坑記錄!!(二:jmx方式)[6]•使用VisualVM監控遠程伺服器JVM[7]•java:jvm:jvisualvm安裝visualgc插件[8]•IBM:使用 VisualVM 進行性能分析及調優[9]引用連結[1] jvisualvm插件中心:: http://visualvm.github.io/pluginscenters.html
  • 8款伺服器和應用性能監控工具
    這些方法都不是錯誤的,找到適合你需求的正確伺服器監控是網絡優化的重要組成部分。伺服器性能監控沒有「一刀切」的解決方案,以下我們將介紹從開源解決方案到企業級付費實施10大解決方案。每個都有自己的優點和缺點,目的幫助你找到適合網絡的正確工具。如何選擇伺服器監控工具?
  • 大型企業JVM性能調優實戰Java垃圾收集器及gcroot
    02:JVM類加載機制大型企業JVM性能調優實戰之gcroot01:JVM類加載機制 - 類加載的生命周期概述java的class類文件實際上是二進位(字節碼)文件格式,class文件中包含了java虛擬機指令集和符號表以及若干其他輔助信息。
  • java垃圾回收以及jvm參數調優概述
    和ParNew區別 5.6  jvm常用監控工具 Java技術體系中所提倡的自動內存管理最終可以歸結為自動化地解決了兩個問題:給對象分配內存以及回收分配給對象的內存。首先,G1的設計原則就是簡單可行的性能調優開發人員僅僅需要聲明以下參數即可:-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200其中-XX:+UseG1GC為開啟G1垃圾收集器,-Xmx32g 設計堆內存的最大內存為32G,-XX:MaxGCPauseMillis=200設置GC的最大暫停時間為200ms。
  • Java:故障排查、JVM性能監控工具單
    使用分析工具能提升咱們分析數據以及定位並解決問題的效率。常用命令JDK提供了一系列的用於監控、診斷Java進程的工具,它們在JDK安裝目錄``bin``目錄下,我們該如何使用它去得到有用的信息並分析系統問題以及性能瓶頸呢?下面詳細介紹。
  • JVM、GC 大串講,面試夠用了
    JRE (Java 運行時環境),包含了jvm和core lib。JDK (Java 開發工具包),它集成了jre和一些工具。比如javac.exe,java.exe,jar.exe等。大家都知道,要想執行java程序,需要安裝jdk。JVM 初識JVM其實是一種規範,它提供可以執行Java字節碼的運行時環境。不同的供應商提供這種規範的不同實現。
  • 譯文|RedHat 性能調優
    性能優化是為了提高性能性能,減少資源消耗和應用對系統的影響。
  • 9個最佳SSD狀態監控及性能優化工具
    如我們所知,與傳統硬碟驅動器(HDD)相比,固態硬碟具有極高的磁碟性能,尤其是新出廠的硬碟。但隨著時間的推移,SSD的性能會急劇下降。而且當存儲在其上的數據達到總容量的約70%時,尤其如此。SSD測試工具在監控固態硬碟的運行狀況和性能方面發揮著重要作用,使用這些工具可以幫助你做很多應對措施,來最大限度地減少性能下降。
  • JVM超神之路:年後跳槽需要的JVM知識點,周末給你整理了一份!!!
    13、棧上分配是什麼意思14、簡述下對象的分配規則四、實戰調優1、你在項目中都使用了哪些參數列印GC?2、常用的調優工具有哪些?7、大型項目如何進行性能瓶頸調優8、你實際遇到調優的場景GC常用參數Parallel常用參數CMS常用參數
  • 應用性能監控的10個小技巧
    而只有確保移動應用的終端用戶的訪問體驗,才能真正提高員工之間、合作夥伴之間的工作效率。      因此,應用開發者和企業的IT運維部門不應該僅僅關注伺服器、存儲、網絡的IT基礎設施的運行狀況,而應該花更多時間去了解終端用戶的應用使用體驗,並讓相關業務部門及時獲得相應信息,建立正確的工作流程,從而保證應用服務的高可用。下面給出10個應用性能監控小技巧,教你如何提升你的應用體驗。
  • ...SpringBoot+Ant Design 的快速開發平臺 - OSCHINA - 中文開源...
    ⊙增加系統性能監控各種功能(Redis監控 、Tomcat、jvm、伺服器信息、請求追蹤等)                      ⊙在線文檔同步升級                       ————你想要的,都來了!
  • 詳解十三款運維監控工具
    有效的運行監測體系,最終離不開相關技術平臺的支撐,而我們需要了解監測技術平臺詳解十三款運維監控工具一、開源工具介紹Zabbix因為這款工具除了繪圖比較好看,其他的功能不如我們的zabbix。我們這裡就簡單的說一下,以後會有相關文檔,請繼續關注abcdocker!
  • sar工具在監控性能方向的實踐
    1、背景介紹任何軟體在正式發布前,都會對相對應的接口進行性能壓測,以確保軟體在高強度的壓力下,能夠滿足用戶的操作,避免系統卡死等異常的現象。特別是在大促進行之前,性能測試及調優就顯得格外重要。針對該系統,可以通過linux系統自帶的工具包,進行監控,查看性能指標。
  • HBase調優|HBase + G1GC 性能調優
    先傳送門一下,之前在HBaseConAsia2017分享過一個G1GC調優的PPT: http://openinx.github.io/2012/01/01/my-share/首先,對G1算法不熟悉的同學,可以仔細讀一讀Oracle的G1算法教程,教程基本交代了G1的運行原理以及和CMS本質區別,如果對算法細節感興趣,可以讀一下Garbage-First
  • Docker 監控實戰
    監控、告警是運營系統最核心的功能之一,騰訊內部有一套很成熟的監控告警平臺,而且開發運維同學已經習慣這套平臺,如果我們針對 Docker 容器再開發一個監控告警平臺,會花費很多精力,而且沒有太大的意義。所以,我們儘量去兼容公司現有的監控告警平臺。每個容器內部會運行一個代理,從 /proc 下面獲取 CPU、內存、IO 的信息,然後上報公司的監控告警平臺。
  • SQL性能調優:查找慢查詢的5種方法
    SQL性能調優是一場永無止盡的鬥爭。我不是一名DBA,而是一名15年的開發人員。我從開始用SQL Server資料庫工作,一直到用Stackify的大SQL Azure資料庫。這麼多年來,我看到了一切。在本文中,我將提供一些技巧,以便開發人員可以在SQL Server中查找SQL慢查詢並進行性能調優。
  • JVM源碼分析之jstat工具原理完全解讀
    對於UsePerfData和PerfDisableSharedMem這兩個參數,這裡著重講一下:UsePerfData:如果關閉了UsePerfData這個參數,那麼jvm啟動過程中perf memory都不會被創建,jvm運行過程中自然不會再將這些性能數據保存起來,默認情況是是打開的PerfDisableSharedMem:該參數決定了存儲PerfData的內存是不是可以被共享