JVM調優之JDK命令行工具

jstack基本使用命令

功能:用于生成虛擬機當前時刻的線程快照,用于定位線程出現長時間停頓的原因,如線程死鎖、死循環、請求外部資源導致的長時間等待等都是導致線程長時間停頓的常見原因。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程在后臺到底做了些什么事情,或者等待著什么資源。

jstack [option] pid 示例:jstack -l 1214

-F : 當正常輸出請求不被響應時,強制輸出線程堆棧

-l : 除堆棧外,顯示關于鎖的附加信息

-m : 如果調用到本地方法的話,可以顯示C/C++的堆棧

jmap基本使用命令:

1.查看heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情況.

jamp -heap pid 示例:jmap -heap 25013

2.生成dump文件(生成進程的內存鏡像)

jamp -dump:format=b,file=文件地址.hprof pid 示例:jmap -dump:format=b,file=/zz/dump1.hprof 25013

jhat基本使用命令:

堆文件內存分析命令,通過IP:7000訪問。可以查看對象的數量,大小等等,并支持對象查詢語言。但分析不方便,不如jvisualvm便利。

jhat 堆文件地址,示例:jhat /zz/dump1.hprof

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

jhat -J-Xmx512m <heap dump file> 示例:jhat -J-Xmx512m /zz/dump1.hprof

jstat基本使用命令:

jstat命令(性能分析)可以查看堆內存各部分的使用量,以及加載類的數量

jstat [Options] pid 間隔時間(毫秒) 打印次數

[Options]值:

-gc 監視GC堆情況,包括Eden,2個survivor區,老年代,永久代等容量、已用容量、GC時間等等.

-gcutil 監視內容跟-gc一樣,但主要輸入已使用空間占總空間百分比.

-gccause監視內容跟-gc一樣,但會輸出上一次GC產生的原因.

-class 類加載統計

-compiler 編譯統計

輸入打印顯示字母含義:

S0C: 年輕代中第一個survivor(幸存區)的容量 (KB)

S1C: 年輕代中第二個survivor(幸存區)的容量 (KB)

S0U: 年輕代中第一個survivor(幸存區)目前已使用空間 (KB)

S1U: 年輕代中第二個survivor(幸存區)目前已使用空間 (KB)

EC: 年輕代中Eden(伊甸園)的容量 (KB)

EU: 年輕代中Eden(伊甸園)目前已使用空間 (KB)

OC: Old代的容量 (KB)

OU: Old代目前已使用空間 (KB)

MC: 方法區大小 (KB)

MU: 方法區使用大小 (KB)

CCSC: 壓縮類空間大小(KB)

CCSU: 壓縮類空間使用大小(KB)

YGC: 從應用程序啟動到采樣時年輕代中gc次數

YGCT: 從應用程序啟動到采樣時年輕代中gc所用時間(s)

FGC: 從應用程序啟動到采樣時old代(全gc)gc次數

FGCT: 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)

GCT: 從應用程序啟動到采樣時gc用的總時間(s)

LGCC:上一次GC原因

P:Perm space 區(永久區)已使用空間的百分比

類加載結果打印:

Loaded:加載class的數量

Bytes:所占用空間大小

Unloaded:未加載數量

Bytes:未加載所占空間大小

Time:時間

編譯結果打印

Compiled:編譯數量

Failed:失敗數量

Invalid:不可用數量

Time:時間

FailedType:失敗類型

FailedMethod:失敗的方法

PS:

常駐內存區(P)的使用率,始終停留在98.49%左右,說明常駐內存沒有突變,比較正常。

如果young gc和full gc能夠正常發生,而且都能有效回收內存,常駐內存區變化不明顯,則說明java內存釋放情況正常,垃圾回收及時,java內存泄露的幾率就會大大降低。但也不能說明一定沒有內存泄露。

發生Full GC的原因是:

1.老年代Tenured內存滿了

2.永久代Perm內存滿了

3.System.gc()被顯示調用

jstack基本使用命令

功能:用于生成虛擬機當前時刻的線程快照,用于定位線程出現長時間停頓的原因,如線程死鎖、死循環、請求外部資源導致的長時間等待等都是導致線程長時間停頓的常見原因。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程在后臺到底做了些什么事情,或者等待著什么資源。

jstack [option] pid 示例:jstack -l 1214

-F : 當正常輸出請求不被響應時,強制輸出線程堆棧

-l : 除堆棧外,顯示關于鎖的附加信息

-m : 如果調用到本地方法的話,可以顯示C/C++的堆棧

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容