当前位置:网站首页>JVM命令之 jstat:查看JVM統計信息
JVM命令之 jstat:查看JVM統計信息
2022-07-07 05:59:00 【張俊傑1994】
學習 尚矽穀 宋紅康 JVM從入門到精通 的學習筆記
概述
基本語法
其中vmid是進程id號,也就是jps之後看到的前面的號碼,如下:
option參數
-gc
新生代相關
S0C是第一個幸存者區的大小(字節)
S1C是第二個幸存者區的大小(字節)
S0U是第一個幸存者區已使用的大小(字節)
S1U是第二個幸存者區已使用的大小(字節)
EC是Eden空間的大小(字節)
EU是Eden空間已使用大小(字節)
老年代相關
OC是老年代的大小(字節)
OU是老年代已使用的大小(字節)
方法區(元空間)相關
MC是方法區的大小
MU是方法區已使用的大小
CCSC是壓縮類空間的大小
CCSU是壓縮類空間已使用的大小
其他
YGC是從應用程序啟動到采樣時young gc的次數
YGCT是指從應用程序啟動到采樣時young gc消耗時間(秒)
FGC是從應用程序啟動到采樣時full gc的次數
FGCT是從應用程序啟動到采樣時的full gc的消耗時間(秒)
GCT是從應用程序啟動到采樣時gc的總時間
interval參數
用於指定輸出統計數據的周期,單比特為毫秒。即:查詢間隔
count參數
用於指定查詢的總次數
-t參數
可以在輸出信息前加上一個Timestamp列,顯示程序的運行時間。單比特:秒
我們執行jstat -gc -t 13152 1000 10,這代錶1秒打印出1行,一共10行,-t代錶打印出Timestamp總運行時間,結果如下所示:
上方紅色框框中代錶Timestamp,而藍色框框中代錶垃圾回收時間,單比特都是秒,如果讓紅色框框中的某兩個值相减,假設這個值是num1,然後讓對應行的藍色框框中的另外兩個值相减,假設這個值是num2,之後讓num2/num1,得出的差值就是上述所說的GC時間占運行時間的比例
雖然這種方式比較繁瑣,但是在項目部署之後就需要使用命令行去看了,就沒有可視化界面了,所以這種方式也要會
-h參數
可以在周期性數據輸出時,輸出多少行數據後輸出一個錶頭信息
演示
啟動上面的程序
輸入下面的命令
Loaded是加載類的個數
第一個Bytes是加載的類占用的字節數
Unloaded是卸載類的個數
第二個Bytes是卸載的類占用的字節數
Time是類裝載花費的時間
箭頭的參數是 interval參數,
箭頭的意思是1秒鐘打印一次,便於我們持續的監控.會一直打印,直到程序結束了才不會打印.
箭頭的參數是打印的次數,10意思是總共會打印10次,達到10次之後就會停止打印.
-t的意思是輸出 從程序運行起來到現在你敲擊命令的時候總共執行了多長時間,單比特是秒
Timestamp就是這個時間
-h3的意思是每隔三條記錄輸出一次錶格頭部
compiler是顯示編譯過的方法,編譯過的方法的耗時,編譯失敗的方法等等
打印被編譯的方法
s0c 幸存者0區容量
s1c 幸存者1區容量
sou 幸存者0區已經使用的容量
s1u 幸存者1區已經使用的容量
ec 伊甸園區總容量
eu 伊甸園區已經使用的容量
oc 是老年代的總量
ou 是老年代使用的容量
mc是方法區的容量
mu是方法區使用的容量
ccsc是壓縮類的總量
ccsu 是壓縮類的使用容量
ygc 是young gc發生的參數
tgct 是young gc花費的時間
fgc是full gc的參數
fgct 是full gc花費的時間
gct 是總的gc的時間, 總gc花費的時間=young gc花費的時間+full gc花費的時間
jstat:如何排查OOM和內存泄漏
平時的時候可以用一些圖形界面的工具查看,但是在實際生產環境,可能無法使用這些圖形界面工具,只能是用jdk自帶的jstat工具查看監控了.
啟動這個main方法
注意,在執行上面的命令的時候沒有拋出oom异常,然後後面Java程序控制臺就拋出這個异常了.
出現gc的原因
oom排查經驗:
經驗:
我們可以比較Java進程的啟動時間以及總gc的時間(gct列),或者兩次測量的間隔時間以及總gc的時間的增量(執行gc花了多少時間),來得出gc執行時間占程序運行時間的比例.
上面兩個紅框的之間的數據的gct時間之和 除以 上面兩個紅框的之間的數據的 Timestamp時間之和,來得到垃圾回收的時間占用程序執行的總共時間的比例
如果這個比例超過20%,就說明目前的堆壓力較大, 因為垃圾回收的時間稍微多了一點,如果這個比例超過90%了,那就意味著程序執行的時間百分之90的時間都用來垃圾回收了,說明內存空間基本上就沒有什麼了,那麼隨時就有可能出現oom异常了.
用jstat判別內存泄露問題
補充
第1步可以執行命令:jstat -gc -t 13152 1000 20
每隔一段時間觀察一下 ou 參數, 如果 ou參數(老年代內存使用量)的占用越來越高,這個情况就是老年代無法回收的對象在不斷增長, 你就要想想,為什麼gc沒有把這些對象清理掉,估計就有可能出現內存泄露情况了.
jstatd:遠程主機信息收集
因為我們要監控的數據不一定是本地的,很多要監控的數據是線上linux上的,這個時候就需要用jstatd這個工具進行遠程監控了。
命令jstatd是一個rmi服務端程序,作用相當於代理服務器,建立本地計算機與遠程監控工具的通信,jstatd服務器將本機的Java應用程序信息傳遞到遠程計算機上。
边栏推荐
- SAP ABAP BDC (batch data communication) -018
- 职场经历反馈给初入职场的程序员
- 解决pod install报错:ffi is an incompatible architecture
- Randomly generate session_ id
- VScode进行代码补全
- Three level menu data implementation, nested three-level menu data
- Flask1.1.4 Werkzeug1.0.1 源碼分析:啟動流程
- ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用shap决策图结合LightGBM模型实现异常值检测案例之详细攻略
- Red hat install kernel header file
- 980. 不同路径 III DFS
猜你喜欢
C. colonne Swapping [tri + Simulation]
Realize GDB remote debugging function between different network segments
[daily training -- Tencent selected 50] 235 Nearest common ancestor of binary search tree
@pathvariable 和 @Requestparam的详细区别
CTFshow--常用姿势
判断文件是否为DICOM文件
PowerPivot——DAX(函数)
Mac version PHP installed Xdebug environment (M1 version)
An example of multi module collaboration based on NCF
【SQL实战】一条SQL统计全国各地疫情分布情况
随机推荐
yarn入门(一篇就够了)
苹果cms V10模板/MXone Pro自适应影视电影网站模板
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
解决pod install报错:ffi is an incompatible architecture
关于STC单片机“假死”状态的判别
What is message queuing?
软件测试面试技巧
力扣102题:二叉树的层序遍历
Add salt and pepper noise or Gaussian noise to the picture
SAP ABAP BDC (batch data communication) -018
高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
Flask1.1.4 Werkzeug1.0.1 源码分析:启动流程
Introduction to distributed transactions
cf:C. Column Swapping【排序 + 模拟】
盘点国内有哪些EDA公司?
Five core elements of architecture design
原生小程序 之 input切換 text與password類型
Pytorch builds neural network to predict temperature
Go 语言的 Context 详解
2pc of distributed transaction solution