作者:唐叔在學習
專欄:唐叔的Java實踐
關鍵詞: #JDK工具 #Java性能調優 #JVM調優 #內存泄漏排查 #線程死鎖分析 #Java開發工具 #線上問題排查 #Java診斷工具
Hello,大家好,我是愛學習的唐叔。作為Java開發者,JDK內置工具是我們日常開發的"瑞士軍刀"。唐叔將通過本文給熱愛學習的小伙伴們詳細介紹jps、jstack、jmap、jstat等核心工具的使用場景和實戰技巧,幫你快速定位內存泄漏、線程死鎖等疑難雜癥。掌握這些工具,讓你從"API調用工程師"進階為真正的Java問題解決專家!
文章目錄
- 一、開篇:為什么說JDK工具是Java程序員的必修課?
- 二、基礎篇:這些工具你必須會(附實戰命令)
- 2.1 jps - Java進程偵探
- 2.2 jstack - 線程快照分析專家
- 2.3 jmap - 內存泄漏克星
- 三、進階篇:性能調優雙雄
- 3.1 jstat - JVM監控儀表盤
- 3.2 jinfo - JVM參數調參師
- 四、可視化工具:圖形化更高效
- 4.1 JConsole - 入門級監控
- 4.2 VisualVM - 全能型選手
- 五、實戰問題排查指南
- 5.1 CPU 100%問題三步走
- 5.2 OOM內存泄漏排查流程
- 六、總結
一、開篇:為什么說JDK工具是Java程序員的必修課?
各位CSDN的小伙伴們大家好,我是你們的老朋友唐叔!最近在帶團隊做Code Review時,發現很多工作3-5年的同學對JDK內置工具的使用還停留在java -version
階段,遇到生產問題就抓瞎。今天咱們就來好好盤一盤這些被嚴重低估的神器!
📌 真實案例:上周我們一個日活百萬的電商應用突然CPU飆到99%,新人小王折騰半天無果。我用了3分鐘運行
jstack
+top -Hp
組合拳,直接定位到優惠券服務的線程死鎖問題。這就是工具的力量!
二、基礎篇:這些工具你必須會(附實戰命令)
2.1 jps - Java進程偵探
jps -lv
這個命令相當于Linux的ps
命令Java特供版,能顯示:
- 主類全名
- JVM啟動參數
- 進程ID
實戰場景:當服務器跑著多個Java應用時,快速找到目標進程PID
2.2 jstack - 線程快照分析專家
jstack -l <pid> > thread_dump.log
核心價值:
- 分析線程死鎖(查找
deadlock
關鍵詞) - 定位CPU飆升問題(結合
top -Hp
找出高CPU線程) - 檢查線程阻塞情況
🔥 熱點技巧:線上問題建議連續抓3次dump(間隔10秒),用jstack
對比分析
2.3 jmap - 內存泄漏克星
jmap -heap <pid> # 堆內存概況
jmap -histo:live <pid> # 對象統計
jmap -dump:format=b,file=heap.hprof <pid> # 生成堆轉儲文件
典型應用:
- 發現內存泄漏(觀察特定對象數量異常增長)
- 分析堆內存分布
- 配合MAT/Eclipse Memory Analyzer深度分析
?? 注意:生產環境慎用-dump
,可能引發STW停頓!
三、進階篇:性能調優雙雄
3.1 jstat - JVM監控儀表盤
jstat -gcutil <pid> 1000 5
輸出示例:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 25.43 78.23 65.43 95.12 90.11 15 0.250 3 0.480 0.730
關鍵指標解讀:
- YGC/YGCT:Young GC次數/耗時
- FGC/FGCT:Full GC次數/耗時
- O:老年代使用率
3.2 jinfo - JVM參數調參師
jinfo -flags <pid> # 查看所有參數
jinfo -flag MaxHeapSize <pid> # 查詢特定參數
使用場景:
- 驗證運行期參數是否生效
- 動態調整部分參數(僅限于可寫參數)
四、可視化工具:圖形化更高效
4.1 JConsole - 入門級監控
適合場景:
- 開發環境基礎監控
- 堆內存/線程/類的實時查看
4.2 VisualVM - 全能型選手
插件推薦:
- Visual GC:直觀看GC過程
- MBeans:監控JMX指標
- BTrace:動態追蹤(需謹慎)
💡 唐叔建議:阿里開源的Arthas現在更香,支持熱修復!
五、實戰問題排查指南
5.1 CPU 100%問題三步走
top -Hp <pid>
找高CPU線程printf "%x\n" <tid>
轉16進制jstack <pid> | grep -A 20 <nid>
定位代碼
5.2 OOM內存泄漏排查流程
jmap -histo:live <pid>
初步篩查jmap -dump
生成堆快照- 用MAT分析支配樹
六、總結
以上就是本期唐叔的分享內容啦,讓我們來簡單重點回顧下吧:
- 診斷線程問題 → jps + jstack
- 分析內存問題 → jmap
- 實時監控 → jstat
- 參數驗證 → jinfo
- 可視化 → jconsole + VisualVM
大家在工作中遇到過哪些棘手的JVM問題?歡迎評論區留言討論~ 覺得有用的話別忘了點贊收藏!
往期Java文章推薦:
- Arthas:Java性能優化分析的終極利器
- 新手向:IDEA代碼調試技巧指南