jvm監控及診斷工具

1概述:可能造成java應用程序出現性能問題的原因有很多,例如,線程控制,磁盤讀寫,數據庫訪問,網絡I/O,垃圾收集等。

立足點:使用數據說明問題,使用知識分析問題,使用該工具處理問題。

2.jps查看正在運行的進程

jps(Java Process Status)

package com.qf58.exec.ratelimiter;

import java.util.Scanner;

/**
 * @version 1.0
 * @author劉源源
 * @date2021-02-21 09:43
 */

public class JpsTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String info = scanner.next();
    }

}

 

運行前,cmd 輸入jps 

運行後:cmd 輸入jps

這個13272就是cpu分配的啓動進程

 

3.jstat :查看jvm統計信息

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

linux上常用於檢測垃圾回收問題和內存泄露問題。

參數選項option可以由以下值構成。
類裝載相關的:
-class:顯示ClassLoader的相關信息:類的裝載、卸載數量、總空間、類裝載所消耗的時間等
 
垃圾回收相關的:
-gc:顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。
-gccapacity:顯示內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間。
-gcutil:顯示內容與-gc基本相同,但輸出主要關注已使用空間佔總空間的百分比。
-gccause:與-gcutil功能一樣,但是會額外輸出導致最後一次或當前正在發生的GC產生的原因。
-gcnew:顯示新生代GC狀況
-gcnewcapacity:顯示內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間
-geold:顯示老年代GC狀況
-gcoldcapacity:顯示內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間
-gcpermcapacity:顯示永久代使用到的最大、最小空間。
 
JIT相關的:
-compiler:顯示JIT編譯器編譯過的方法、耗時等信息
-printcompilation:輸出已經被JIT編譯的方法 

1>類加載統計

jstat -class 13272

Loaded:加載class的數量
Bytes:所佔用空間大小
Unloaded:未加載數量
Bytes:未加載佔用空間
Time:加載時間

如上的unloaded爲0 說明都加載完成了

2>編譯統計

jstat -compiler 13272

Compiled:編譯數量。
Failed:失敗數量
Invalid:不可用數量
Time:時間
FailedType:失敗類型
FailedMethod:失敗的方法

如上編譯了97個字節,失敗爲0 花費時間爲0.03秒

3>垃圾回收統計

jstat -gc 13272

S0C:第一個倖存區的大小
S1C:第二個倖存區的大小
S0U:第一個倖存區的使用大小
S1U:第二個倖存區的使用大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區大小
MU:方法區使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間

 

jstat還可以用來判斷是否出現內存泄漏。
 
第1步:
在長時間運行的 Java 程序中,我們可以運行jstat命令連續獲取多行性能數據,並取這幾行數據中 OU 列(即已佔用的老年代內存)的最小值。
第2步:
然後,我們每隔一段較長的時間重複一次上述操作,來獲得多組 OU 最小值。如果這些值呈上漲趨勢,則說明該 Java 程序的老年代內存已使用量在不斷上漲,這意味着無法回收的對象在不斷增加,因此很有可能存在內存泄漏。

4>jinfo:實時查看和修改JVM配置參數

jinfo(Configuration Info for Java)
查看虛擬機配置參數信息,也可用於調整虛擬機的配置參數。

官方幫助文檔:
https://docs.oracle.com/en/java/javase/11/tools/jinfo.html

jinfo -flags 13272      查看曾經賦過值的一些參數

擴展:java -XX:+PrintFlagsInitial     查看所有JVM參數啓動的初始值

          java -XX:+PrintFlagsFinal   查看所有JVM參數的最終值

         java -XX:+PrintCommandLineFlags    查看那些已經被用戶或者JVM設置過的詳細的XX參數的名稱和值

5> jmap:導出內存映像文件&內存使用情況

jmap(JVM Memory Map):作用一方面是獲取dump文件(堆轉儲快照文件,二進制文件),它還可以獲取目標Java進程的內存相關信息,包括Java堆各區域的使用情況、堆中對象的統計信息、類加載信息等。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章