1.虛擬機(jī)進(jìn)程狀況工具:
-
jps命令行工具:
jps是jdk提供的一個(gè)查看當(dāng)前java進(jìn)程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的縮寫。
示例:
jps –l:輸出主類或者jar的完全路徑名:
image.png
jps –v :輸出jvm參數(shù):

-
jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具:
是用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具。它可以顯示本地或遠(yuǎn)程[插圖]虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù),在沒(méi)有GUI圖形界面,只提供了純文本控制臺(tái)環(huán)境的服務(wù)器上,它將是運(yùn)行期定位虛擬機(jī)性能問(wèn)題的首選工具。假設(shè)需要每250毫秒查詢一次進(jìn)程2764垃圾收集的狀況,一共查詢20次,那命令應(yīng)當(dāng)是:
jstat -gc 12008 250 20
image.png
S0C:第一個(gè)幸存區(qū)的大小
S1C:第二個(gè)幸存區(qū)的大小
S0U:第一個(gè)幸存區(qū)的使用大小
S1U:第二個(gè)幸存區(qū)的使用大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
堆內(nèi)存統(tǒng)計(jì):
jstat -gccapacity 12008

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當(dāng)前新生代容量
S0C:第一個(gè)幸存區(qū)大小
S1C:第二個(gè)幸存區(qū)的大小
EC:伊甸園區(qū)的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當(dāng)前老年代大小
OC:當(dāng)前老年代大小
MCMN:最小元數(shù)據(jù)容量
MCMX:最大元數(shù)據(jù)容量
MC:當(dāng)前元數(shù)據(jù)空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當(dāng)前壓縮類空間大小
YGC:年輕代gc次數(shù)
FGC:老年代GC次數(shù)
- jmap:(Memory Map for Java)用于生成堆轉(zhuǎn)儲(chǔ)快照,即Dump文件;還能查詢finalize執(zhí)行隊(duì)列、java堆和永久代詳細(xì)信息,比如空間使用率、當(dāng)前用的是哪種收集器等。
*jstasck:用于生成虛擬機(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í)間等待等都是導(dǎo)致線程長(zhǎng)時(shí)間停頓的常見(jiàn)原因。
jdk可視化工具:
JDK中除了提供大量的命令行工具外,還有兩個(gè)功能強(qiáng)大的可視化工具:JConsole和VisualVM,這兩個(gè)工具是JDK的正式成員,沒(méi)有被貼上“unsupported andexperimental”的標(biāo)簽。
*JConsole:
它是一款基于JMX的可視化監(jiān)視和管理的工具。直接在jdk bin目錄下啟動(dòng)JConsole程序


通過(guò)下面代碼對(duì)內(nèi)存進(jìn)行監(jiān)控。
package com.shuai.Util;
import java.util.ArrayList;
import java.util.List;
public class TestGc2 {
static public class OMG{
public byte[] I=new byte[64*1024];
}
public static void fillHeap(int num)throws Exception {
List<OMG> omgList =new ArrayList<>();
for (int i=0;i<num;i++){
Thread.sleep(50);
omgList.add(new OMG());
}
System.gc();
}
public static void main(String[] args) throws Exception{
fillHeap(1000);
}
}
*VisualVM:多合一故障處理工具:
VisualVM基于NetBeans平臺(tái)開(kāi)發(fā),因此它一開(kāi)始就具備了插件擴(kuò)展功能的特性,通過(guò)插件擴(kuò)展支持,VisualVM可以做到:□ 顯示虛擬機(jī)進(jìn)程及進(jìn)程的配置和環(huán)境信息(jps、jinfo)。
- 監(jiān)視應(yīng)用程序的CPU、GC、堆、方法區(qū)及線程的信息(jstat、jstack)。
- dump及分析堆轉(zhuǎn)儲(chǔ)快照(jmap、jhat)。
- 方法級(jí)的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長(zhǎng)的方法。
- 離線程序快照:收集程序的運(yùn)行時(shí)配置、線程dump、內(nèi)存dump等信息建立一個(gè)快照,可以將快照發(fā)送開(kāi)發(fā)者處進(jìn)行Bug反饋。

