【JDK内置工具】常用工具和实战指令
作者:唐叔在学习
专栏:唐叔的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代码调试技巧指南