8款 JDK 自帶的監控和故障處理工具,定位問題太方便了!
VSole2023-01-31 10:15:53
jdk本身為我們定位java相關的生產問題提供了內置的工具,這些內置的工具用好了足以應對常見的大多數生產問題,這篇就將jdk自帶命令行和可視化工具做一下匯總介紹。
jps–虛擬機進程查看工具
類似于ps命令,輸出虛擬機進程信息,第一列為LVMID跟pid是一致的。

jstat–虛擬機統計監視工具
虛擬機統計信息監視工具,監視虛擬機各種運行狀態比如GC的統計信息。
比如:每250毫秒查詢一次進程垃圾收集狀況,一共查詢20次。
#格式:jstat [option] lvmid interval count $jstat -gc 17936 250 20

解釋:
- 「C:」 容量
- 「U:」 使用量
- 「E:」 eden區
- 「O:」 老年代
- 「M:」 元數據區
- 「YGC:」 YoungGC次數
- 「YGCT:」 YoungGC花費總時間
- 「FGC:」 FullGC次數
- 「FGCT:」 FullGC花費總時間
jinfo–虛擬機配置信息工具
實時查看和調整虛擬機各項參數
比如:查看進程17936的System.properties()信息
jinfo -sysprops 17936

查看老年代觸發gc百分比
$jinfo -flag CMSInitiatingOccupancyFraction 17936

jmap–虛擬機內存映象工具
jmap命令用于生成heapdump文件,也就是“堆轉儲快照”。
其他方式如:-XX:HeapDumpOnOutOfMemoryError或者kill -3 pid
# 給進程為17936生成dump二進制文件,名稱為jeffdump.bin $jmap -dump:format=b,file=jeffdump.bin 17936 # 打印 C:\Users\Administrator>jmap -dump:format=b,file=jeffdump.bin 17936 Dumping heap to C:\Users\Administrator\jeffdump.bin ... Heap dump file created
jhat–虛擬機HeapDump分析工具
jhat內置了一個微型的http/html服務器,生成dump文件的分析結果后,可以在瀏覽器中查看。
一般不會再服務器上直接用jhat分析dump,畢竟耗時耗資源,而且jhat分析功能簡陋,一般可以用VisualVM或者Eclipse Memory Analyzer。
$jhat jeffdump.bin C:\Users\Administrator>jhat jeffdump.bin Reading from jeffdump.bin... Dump file created Wed Apr 29 17:30:48 CST 2020 Snapshot read, resolving... Resolving 1831310 objects... Chasing references, expect 366 dots............. ................................................ ................................................ ................................................ ..................................... Eliminating duplicate references................ ................................................ ................................................ ................................................ .................................. Snapshot resolved. Started HTTP server on port 7000 Server is ready.
打開瀏覽器:http://localhost:7000/

分析內存泄露問題主要使用到Heap Histogram,可以找到內存中總容量最大的對象

jstack–java堆棧跟蹤工具
生成虛擬機當前時刻的線程快照,即threaddump或者javacore文件。也就是當前虛擬機每一條線程正在執行的方法堆棧集合,可以用來定位線程長時間停頓的原因,比如線程間死鎖、死循環、請求外部資源導致的長時間等待。
$jstack -l 17936
Jconsole和VisualVM
- jconsole和visualVM 是jdk提供的兩個可視化監控工具。VisualVm是jdk發布的功能最強大的運行監視和故障處理工具。比專業收費的Jprofiler、youkit都不遜色多少。
- VisualGC: 非jdk自帶的工具,IDEA也有插件可以安裝。
- jmc:BEA公司JDK帶的工具。需要裝oracle的jdk才有。生產環境不建議使用,太重可能干擾線上服務。
visualVM分析OutOfMemoryError異常
- 對于CMS收集器來說,如果超過98%的時間都在GC,而只有不足2%的內存恢復,則會拋出
OOM:GC overhead limit exceeded。不過可以設置-XX:-UseGCOverheadLimit關閉這個異常的拋出。不過仍然可能會拋出OOM:Java Heap sapce異常!或者OOM:unable to creare new native thread. - 使用jdk自帶的工具java VisualVM來分析
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
生成的java_pid9516.hprof文件,也可以使用Eclipse Memory Analyzer打開。

VSole
網絡安全專家