Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Java章节编写规范
  • Java基础

  • Java集合

  • Java并发

  • Java IO

  • JVM

    • JVM概述
    • JVM基础

    • 类加载机制

    • 运行时内存

    • 垃圾回收

    • 执行引擎与优化

    • 工具与问题排查

      • JVM参数
      • JDK命令行工具
        • 1. jps
        • 2. jstat
        • 3. jinfo
        • 4. jstack
        • 5. jmap
        • 6. jcmd
        • 7. javap
        • 8. jfr 与 jcmd
        • 9. 阶段小结
        • 10. 工具选择流程
        • 11. 线上执行风险表
        • 12. Tips 快问快答
      • jstack线程分析
      • jmap与堆转储分析
      • jcmd与JFR
      • CPU飙高排查
      • 内存泄漏排查
      • 频繁Full GC排查
    • 调优实践与面试

目录

JDK命令行工具

JDK 自带了很多命令行工具,用于观察和诊断 JVM。线上环境中,这些工具往往比图形化工具更实用。

# 1. jps

jps 用于查看当前机器上的 Java 进程。

jps -l

常见输出:

12345 com.example.Application

拿到进程 ID 后,就可以使用其他工具继续分析。

# 2. jstat

jstat 用于查看 JVM 运行时统计信息,常用于观察 GC。

jstat -gcutil 12345 1000 10

表示每 1 秒输出一次,共输出 10 次。

关注指标:

  • 新生代使用率。
  • 老年代使用率。
  • GC 次数。
  • GC 时间。

# 3. jinfo

jinfo 用于查看或修改部分 JVM 参数。

jinfo -flags 12345

可以查看 JVM 启动参数。

注意:不是所有参数都能运行时修改,生产环境修改参数要谨慎。

# 4. jstack

jstack 用于生成线程转储。

jstack -l 12345 > thread.dump

常用于排查:

  • CPU 飙高。
  • 死锁。
  • 线程阻塞。
  • 线程池耗尽。
  • 请求卡住。

# 5. jmap

jmap 可用于查看堆信息、生成堆转储。

jmap -dump:format=b,file=heap.hprof 12345

注意:生成 dump 可能触发停顿,dump 文件可能很大,线上使用要评估影响。

# 6. jcmd

jcmd 是功能非常强的综合诊断工具。

查看支持命令:

jcmd 12345 help

常用命令:

jcmd 12345 VM.flags
jcmd 12345 GC.heap_info
jcmd 12345 Thread.print
jcmd 12345 GC.class_histogram
jcmd 12345 JFR.start

很多场景中,jcmd 可以替代或增强 jmap、jstack、jinfo 的能力。

# 7. javap

javap 用于查看 class 文件信息和字节码。

javap -c -v Hello.class

常用于学习字节码、分析编译结果、理解语法糖。

# 8. jfr 与 jcmd

JFR(Java Flight Recorder)可以记录 JVM 运行事件,如:

  • CPU。
  • 分配。
  • 锁。
  • GC。
  • IO。
  • 线程。

可以通过 jcmd 启动和停止 JFR。

# 9. 阶段小结

JDK 命令行工具是 JVM 排障基本功。jps 找进程,jstat 看 GC 趋势,jstack 看线程,jmap 看堆,jcmd 做综合诊断,javap 看字节码。熟练使用这些工具,比记住大量参数更实用。

# 10. 工具选择流程

遇到线上问题
  │
  ├─ 不知道进程号
  │   └─ jps / ps
  │
  ├─ 怀疑 GC
  │   ├─ jstat
  │   └─ GC 日志
  │
  ├─ 怀疑线程阻塞/死锁/CPU
  │   └─ jstack / jcmd Thread.print
  │
  ├─ 怀疑堆内存
  │   ├─ jcmd GC.class_histogram
  │   └─ jmap / jcmd GC.heap_dump
  │
  ├─ 怀疑运行时综合性能
  │   └─ JFR
  │
  └─ 怀疑字节码/版本
      └─ javap

# 11. 线上执行风险表

工具 风险 建议
jps 低 可放心使用
jstat 低 适合持续观察
jstack 较低 高峰可用,但避免过频
jmap -dump 中到高 大堆可能停顿,低峰执行
jcmd GC.heap_dump 中到高 同样注意停顿和磁盘
JFR 低到中 profile 配置比 default 开销高

# 12. Tips 快问快答

Q:jmap dump 会不会影响线上?

A:可能会。大堆 dump 可能触发 STW,并产生巨大文件。

Q:jstat 能定位内存泄漏对象吗?

A:不能。它能看趋势,具体对象要看 heap dump 或 class histogram。

Q:jstack 抓一次够吗?

A:通常不够。线程问题建议连续抓多次对比。

Q:jcmd 和 jmap/jstack 什么关系?

A:jcmd 是更统一的诊断入口,很多能力可以覆盖或增强传统工具。

上次更新: 2026/06/24, 16:03:01
JVM参数
jstack线程分析

← JVM参数 jstack线程分析→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式