当前位置: 首页 > news >正文

【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%问题三步走

  1. top -Hp <pid> 找高CPU线程
  2. printf "%x\n" <tid> 转16进制
  3. jstack <pid> | grep -A 20 <nid> 定位代码

5.2 OOM内存泄漏排查流程

  1. jmap -histo:live <pid> 初步筛查
  2. jmap -dump 生成堆快照
  3. 用MAT分析支配树

六、总结

以上就是本期唐叔的分享内容啦,让我们来简单重点回顾下吧:

  1. 诊断线程问题 → jps + jstack
  2. 分析内存问题 → jmap
  3. 实时监控 → jstat
  4. 参数验证 → jinfo
  5. 可视化 → jconsole + VisualVM

大家在工作中遇到过哪些棘手的JVM问题?欢迎评论区留言讨论~ 觉得有用的话别忘了点赞收藏!


往期Java文章推荐:

  • Arthas:Java性能优化分析的终极利器
  • 新手向:IDEA代码调试技巧指南
http://www.dtcms.com/a/289516.html

相关文章:

  • 贝叶斯分类器的相关理论学习
  • 力扣面试150(34/150)
  • 人脸识别:AI 如何精准 “认人”?
  • Florence2-通用表征完成多种视觉任务的视觉基础模型
  • 最新轻量美化表白墙系统源码v2.0 带后台版 附搭建教程
  • 分治算法---归并
  • 智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】
  • Muduo库中单例模式详解
  • 【Anaconda】Conda 虚拟环境打包迁移教程
  • 基于ACPs协议的智能体互联网示例(多智能体旅游规划)
  • JMeter连接数据库
  • Linux操作系统从入门到实战(十一)回车换行问题与用户缓冲区问题
  • C++虚函数易错点整理
  • 20250720-4-Kubernetes 调度-指定节点调度:nodeSelectornodeAffinity笔记
  • LeetCode 3202.找出有效子序列的最大长度 II:取模性质(动态规划)
  • JDK8默认垃圾回收器
  • (Python)类和类的方法进阶(基础教程介绍)(Python基础教程)
  • 利用核壳生物支架调控纤维 - 成骨稳态【AbMole】
  • Linux:线程控制
  • 【网络编程】网络传输-JSON
  • 【C语言】字符串与字符函数详解(下)
  • Shell脚本-cut工具
  • 从零到一MCP快速入门实战【1】
  • 疯狂星期四第13天运营日报
  • Java拓扑排序:2115 从给定原材料中找到所有可以做出的菜
  • Linux 基本指令详解
  • Self-Consistency:跨学科一致性的理论与AI推理的可靠性基石
  • WebDriver 对象中的方法
  • C++STL系列之list
  • Vue DIY 内容文本超出组件