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

JDK 工具

Java 提供了一系列强大的命令行工具,用于监控和管理正在运行的 Java 进程。这些工具是 JDK 自带的,无需额外安装,是开发者排查 JVM 问题、分析内存使用、查看进程状态的重要利器。

本文将带你一步步使用 jps、jstat、jinfo、jmap、jstack 等工具,从基础进程查看到内存分析、线程堆栈追踪,全面掌握 Java 进程监控技巧。


一、确认 Java 环境与进程

在开始之前,请确保你的系统已安装 JDK,并且有正在运行的 Java 进程。可以使用以下命令查看当前所有 Java 进程:

jps -l

输出示例:

12345 com.example.MainApp
67890 sun.tools.jps.Jps

这会列出所有 Java 进程及其主类的全限定名,方便你选择要监控的目标进程。


二、常用 JVM 监控工具详解

1. jps:列出 Java 进程

jps 是最基础的进程查看工具,用于列出当前用户下的所有 Java 进程。

jps -l

参数说明:

-l:输出主类的全限定名或 JAR 文件路径。


2. jstat:监控 JVM 运行时状态

jstat 用于实时监控 JVM 的堆内存、GC 情况、类加载等指标,是排查性能问题的利器。

jstat -gcutil <pid> 1000 5

参数说明:

-gcutil:显示堆中各区域的使用百分比;

1000:每 1000 毫秒刷新一次;

5:共输出 5 次。


3. jinfo:查看和修改 JVM 参数

jinfo 用于查看或动态修改 JVM 启动参数,适合排查启动配置问题。

jinfo -flags <pid>

输出示例:

Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0.5+8-LTS
Non-default VM flags: -XX:+UseG1GC -XX:MaxGCPauseMillis=200

4. jmap:生成堆转储(Heap Dump)

jmap 可用于生成堆内存快照,适合排查内存泄漏或对象占用问题。

jmap -dump:format=b,file=heapdump.hprof <pid>

参数说明:

-dump:format=b:生成二进制格式的堆转储文件;

file=heapdump.hprof:指定输出文件名。


5. jstack:查看线程堆栈(新增)

jstack 用于生成 Java 进程中所有线程的堆栈跟踪,帮助排查线程死锁、阻塞、CPU 高占用等问题。

jstack -l <pid>

参数说明:

-l:输出额外的锁信息(如锁定的对象);

-F:强制输出堆栈(即使进程卡住);

-m:混合模式(同时输出 Java 栈和本地栈,适用于 JNI 调用)。

输出示例:

"main" #1 prio=5 os_prio=0 tid=0x00007f8c1c009800 nid=0x1234 runnable [0x00007f8c1d4f6000]java.lang.Thread.State: RUNNABLEat com.example.MainApp.main(MainApp.java:10)Locked ownable synchronizers:- None

三、进阶工具:可视化与深度分析

1. jcmd:全能型 JVM 控制工具

jcmd 是一个多功能工具,可以执行 JVM 内部命令,如 GC、生成堆转储、查看类加载等。

jcmd <pid> GC.class_histogram

常用命令:

命令功能
GC.class_histogram查看堆中所有类的统计信息
GC.heap_dump生成堆转储文件
Thread.print打印线程堆栈(类似 jstack)
VM.flags显示 JVM 启动参数

2. jhat:堆转储分析工具

jhat 用于分析 jmap 生成的堆转储文件,并提供 Web 界面查看对象引用关系。

jhat heapdump.hprof

启动后访问 http://localhost:7000 即可查看堆中对象的信息。


3. jvisualvm:可视化监控工具

jvisualvm 是 JDK 自带的图形化工具,支持实时监控、线程分析、堆转储分析等功能。

启动命令:

jvisualvm

    jvisualvm 可以实时查看 CPU、内存、线程状态;支持 Heap Dump 分析;可安装插件扩展功能(如 Visual GC)。


    4. jmc:Java Mission Control(专业监控工具)

    jmc 是 Oracle 推出的专业 JVM 监控工具,支持飞行记录(Flight Recorder),适合长期监控和事后分析。

    启动命令:

    jmc
    

    5. javap:反编译工具(辅助分析)

    javap 用于反编译 .class 文件,查看类的结构(方法、字段、常量池等),辅助理解类的内部实现。

    javap -c MyClass.class
    

    参数说明:

    -c:显示字节码;

    -v:显示详细信息(包括常量池)。


    四、实战场景:如何选择工具?

    场景推荐工具
    快速查看 Java 进程jps
    实时监控堆内存和 GCjstat
    查看或修改 JVM 参数jinfo
    生成堆转储文件jmap
    分析线程堆栈或死锁jstack
    执行 JVM 内部命令jcmd
    可视化监控与分析jvisualvmjmc
    反编译类文件javap

    五、总结

    JVM 提供的工具链非常强大,从基础的进程查看到深度的内存、线程分析,应有尽有。熟练掌握这些工具,可以大幅提升你在排查 JVM 问题、优化性能时的效率。

    如果你有更复杂的监控需求(如分布式系统监控、自动化告警),可以结合这些工具与日志系统(如 ELK、Prometheus)一起使用,效果更佳。

    http://www.dtcms.com/a/341512.html

    相关文章:

  • IDEA(十四) IntelliJ Idea 常用快捷键(Mac)
  • 会计人员职业发展框架:核心能力构建与进阶路径
  • ROADS落地的架构蓝图
  • Java 通过 m3u8 链接下载所有 ts 视频切片并合并转换为 mp4 格式
  • Odoo 18 通用图片导入工具:从零到一的企业级开发实战
  • 记录一次ubuntu系统下ovito无法调用显卡驱动报错
  • keepalived的配置
  • Java内置注解
  • 区块链技术:重塑未来互联网的伟大动力
  • 中金所股指期货交易规则
  • c++之指针和引用
  • 第三十三天(信号量)
  • 大模型—— DeepSeek V3.1 Base / Instruct 发布
  • Mqtt — 使用详解EMQX,MQTTX
  • Annexin V应用指南--多领域应用与实验陷阱规避
  • MySQL之分区功能
  • 《算法导论》第 33 章 - 计算几何学
  • 分布式事务之Seata与RocketMQ
  • 【Java SE】初识Java:从语言特性到实战入门
  • 整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接
  • 盲盒商城h5源码搭建可二开幸运盲盒回收转增定制开发教程
  • Python的collections引入的类型介绍(Python中的map, unordered_map, struct, 计数器, chainmap)
  • 元宇宙的硬件设备:从 VR 头显到脑机接口
  • IT运维背锅权限泄露?集中式管控如何化解风险?
  • 【PostgreSQL内核学习:WindowAgg 节点对 Tuplestore 的复用机制】
  • RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
  • 动态规划面试真题解析
  • Linux网络服务(三)——DNS域名解析服务
  • 学习中需不需要划线、做笔记
  • 2-1.利用框架构建一个easy的web应用