JVM生产环境问题定位与解决实战(一):掌握jps、jmap、jstat、jstack、jcmd等基础工具

在这里插入图片描述

本文已收录于《JVM生产环境问题定位与解决实战》专栏,完整系列见文末目录

1. 引言

Java开发工具包(JDK)内置了强大的诊断工具集,用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具,包括jps、jmap、jstat、jcmd、jstack、jvisualvm等,并提供它们的具体应用场景及使用方法,来帮助开发者快速定位运行时问题。


JDK诊断工具全解析与实战指南

一、核心命令行工具详解

1. 进程管理工具 jps

场景

jps是Java自带的一个命令行工具,用于显示当前系统中所有Java应用程序的简要信息。它对于快速获取运行中的Java进程ID(PID)及其主类名非常有用,尤其是在需要连接到特定进程进行进一步分析或管理时。

使用方法
  • 查看所有Java进程的基本信息:只需简单地执行jps命令。
  • 获取更详细的信息:可以通过添加参数如-l来显示完整包路径的主类名,-m来查看传递给main方法的参数,或者-v来查看传递给JVM的选项。在Linux系统中,常使用ps -ef | grep java来过滤出所有包含“java”字符串的进程的详细信息。有了jps可以精确地定位到特定的Java应用程序的进程。如果只是为了查java程序的进程号,jps -l可能会更加简洁的列出你想查找的内容。
jps -q  # 仅显示进程ID(PID)
jps -l  # 显示完整包路径
jps -v  # 显示JVM启动参数
jps -m  # 显示main方法参数
参数 功能说明 示例
-q 只显示 PID jps -q → 38721
-m 显示 main 方法参数 jps -m → 38721 MyApp arg1
-l 显示完整包名/jar路径 jps -l → com.example.Main
-v 显示 JVM 参数 jps -v → -Xmx1024m
-V 显示 JVM 参数(不包含应用参数) jps -V → -XX:MaxPermSize=256m

2. 内存分析工具 jmap

场景

jmap用于生成Java堆的快照(heap dump),这对于诊断内存泄漏等问题至关重要。此外,它还可以显示Java进程的内存映射或共享对象统计信息。

使用方法
  • 创建堆转储文件:jmap -dump:format=b,file=heap.bin <pid>,其中<pid>为Java进程ID。
  • 查看对象分配直方图:jmap -histo <pid>可以列出每个类实例的数量和总大小。
1. 标准参数
jmap [option] <pid>
参数 功能说明 注意事项
-heap 显示堆内存分布 可能导致服务暂停
-histo[:live ] 对象内存直方图统计 live 参数触发 Full GC
-clstats 类加载器统计(JDK8+) 需要 attach 权限
-finalizerinfo 显示等待 finalization 的对象 输出信息有限
-dump: 生成堆转储文件 示例:format=b,file=heap.bin
2. 堆转储选项
jmap -dump:live,format=b,file=heap.hprof 38721
选项 说明
live 只转储存活对象
format=b 二进制格式(必须)
file= 输出文件名
compression=6 压缩级别(0-9,JDK13+)

在这里插入图片描述


3. 线程分析工具 jstack

场景

jstack用来生成Java进程的线程转储,这有助于理解程序在某一时刻的线程状态,主要用于捕获线程执行堆栈 、诊断死锁/CPU热点 。 对于排查死锁、响应慢等问题特别有效。

使用方法
  • 打印线程转储:jstack <pid>直接输出线程转储信息到标准输出。
  • 将线程转储保存到文件:jstack <pid> > thread_dump.txt
jstack -l <pid>  # 显示锁附加信息
jstack -F <pid>  # 强制生成线程快照(用于挂起进程)
jstack -m <pid>  # 混合模式(显示Java和Native栈帧)
参数 功能说明 使用场景
-F 强制生成线程快照 进程无响应时使用
-l 显示锁信息(长格式) 分析死锁必备
-m 混合模式(显示 native 栈) JNI 调用问题分析
-J 传递参数到 JVM 示例:-J-d64 使用64位模式

转存文件分析:如何分析转存文件,包括使用jmap创建堆转储、jstac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹除不掉的轻狂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值