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

【JVM】故障诊断和性能监控命令

这里写目录标题

      • 一、故障诊断、监控和性能分析命令 (jcmd & Tools)
        • 1. `jps` (JVM Process Status Tool)
        • 2. `jinfo` (Configuration Info for Java)
        • 3. `jstat` (JVM Statistics Monitoring Tool)
        • 4. `jstack` (Stack Trace for Java)
        • 5. `jmap` (Memory Map for Java)
        • 6. `jcmd` (全能命令) - **推荐使用**
      • 二、Java 飞行记录器 (JFR) 相关命令
        • 1. 启动 JFR
        • 2. dump / stop / check
        • 3. 分析 JFR 文件
      • 三、常用命令组合与实战场景

一、故障诊断、监控和性能分析命令 (jcmd & Tools)

这些是 jdk/bin/ 目录下的工具,用于监控运行中的 JVM 或诊断问题。它们是诊断线上问题的利器

1. jps (JVM Process Status Tool)

列出当前用户的所有 Java 进程及其 PID 和主类名。

jps -l      # 显示主类的完整包名
jps -m      # 显示传递给 main 方法的参数
jps -v      # 显示传递给 JVM 的参数
2. jinfo (Configuration Info for Java)

查看和动态修改目标 JVM 的各项参数。

jinfo <pid>                         # 打印所有系统属性和VM参数
jinfo -flags <pid>                  # 打印所有VM标志
jinfo -sysprops <pid>               # 打印所有系统属性
jinfo -flag <FlagName> <pid>        # 查看某个特定标志的值
jinfo -flag [+|-]<FlagName> <pid>   # 开启或关闭某个布尔型标志(仅支持可写的标志)
jinfo -flag <FlagName>=<value> <pid> # 设置某个标志的值
3. jstat (JVM Statistics Monitoring Tool)

监控 JVM 的各种运行状态信息,尤其是 GC 和类加载。

# 语法:jstat -<option> <pid> [<interval> <count>]
jstat -gcutil <pid> 1s 5    # 每1秒查询一次GC情况,共5次。关键指标:O(老年代使用率)、P(元空间使用率)、YGC/YGCT(YoungGC次数/耗时)、FGC/FGCT(FullGC次数/耗时)
jstat -gc <pid>             # 显示GC容量和实际使用大小
jstat -class <pid>          # 显示类加载信息(加载/卸载数量)
4. jstack (Stack Trace for Java)

生成 JVM 当前时刻的线程快照。主要用于定位线程停顿、死锁、死循环、请求外部资源耗时过长等问题。

jstack <pid>                    # 打印线程栈
jstack -l <pid>                 # 打印线程栈,同时显示锁的附加信息(常用于分析死锁)
jstack -F <pid>                 # 强制打印(当jstack无响应时使用)
# 通常用法:jstack <pid> > thread_dump.log
5. jmap (Memory Map for Java)

生成堆转储快照(heap dump)或查看堆内存的详细信息。

jmap -heap <pid>                # 显示堆概要信息(GC算法、堆配置、使用情况)
jmap -histo:live <pid>          # 显示堆中对象的统计信息(存活对象),按大小排序
jmap -histo:live <pid> | head -20 # 查看前20个最大的对象# 生成堆转储文件(非常重要,用于内存泄漏分析)
jmap -dump:live,format=b,file=heap_dump.hprof <pid>
6. jcmd (全能命令) - 推荐使用

一个强大的多功能工具,可以执行上述许多命令的功能。语法:jcmd <pid> <command>

jcmd <pid> help                 # 列出该进程支持的所有命令
jcmd <pid> VM.flags             # 类似 jinfo -flags
jcmd <pid> VM.system_properties # 类似 jinfo -sysprops
jcmd <pid> VM.uptime            # JVM运行时长
jcmd <pid> GC.class_histogram   # 类似 jmap -histo
jcmd <pid> GC.heap_info         # 显示堆信息
jcmd <pid> Thread.print         # 类似 jstack
jcmd <pid> GC.run               # 触发Full GC
jcmd <pid> JFR.start            # 启动JFR记录
jcmd <pid> JFR.dump             # 导出JFR记录
jcmd <pid> JFR.stop             # 停止JFR记录# 生成堆转储(比jmap更方便)
jcmd <pid> GC.heap_dump filename=heap_dump.hprof

二、Java 飞行记录器 (JFR) 相关命令

JFR 是 Oracle JDK 自带的一款极其实用的性能分析和事件收集工具,对性能影响很小 (<1%)。

1. 启动 JFR
  • 命令行启动应用时开启
    java -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr -jar myapp.jar
    
  • 对运行中的进程开启 (使用 jcmd):
    jcmd <pid> JFR.start duration=60s filename=myrecording.jfr
    jcmd <pid> JFR.start name=myrecording settings=profile delay=10s duration=2m filename=/tmp/recording.jfr
    
2. dump / stop / check
jcmd <pid> JFR.dump name=myrecording filename=output.jfr # 导出正在进行的记录
jcmd <pid> JFR.stop name=myrecording                    # 停止特定记录
jcmd <pid> JFR.check                                    # 检查当前记录状态
3. 分析 JFR 文件

使用 Java Mission Control (JMC) 图形化工具打开 .jfr 文件进行分析。


三、常用命令组合与实战场景

场景常用命令组合
快速查看 Java 进程jps -l
CPU 占用过高1. top 找到高CPU的Java进程PID
2. top -Hp <pid> 找到高CPU的线程TID
3. 将TID转为16进制 printf "%x\n" <tid>
4. `jstack
程序无响应/死锁jstack -l <pid> > stack.log (分析 stack.log 中的 deadlock 关键字)
频繁 Full GC1. jstat -gcutil <pid> 1s 观察FGC/FGCT变化
2. 使用 jmapjcmd 生成堆转储,用 MATJVisualVM 分析内存泄漏
内存溢出 (OOM)在启动参数中添加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof,让JVM在发生OOM时自动生成堆转储
综合性能分析使用 jcmd 开启一段时间的 JFR 记录,然后用 JMC 进行深度分析

总结:对于日常开发,掌握 jps, jstack, jmap, jstatjcmd 就足以应对大部分问题。对于更复杂的性能调优,JFR 是最强大的内置工具。


文章转载自:

http://al3ORrVC.xtqLd.cn
http://xHJ2TnsL.xtqLd.cn
http://voNnhDiY.xtqLd.cn
http://fCPTYAMx.xtqLd.cn
http://hufY9ZTu.xtqLd.cn
http://QjV8g1mu.xtqLd.cn
http://7Elv5V3G.xtqLd.cn
http://BfApID9q.xtqLd.cn
http://mDX764s5.xtqLd.cn
http://oZyYQdg4.xtqLd.cn
http://pcANexXH.xtqLd.cn
http://RY5PobAJ.xtqLd.cn
http://x7VoAPE1.xtqLd.cn
http://Xf29YMmN.xtqLd.cn
http://ipH1m4HC.xtqLd.cn
http://Xvnupi6k.xtqLd.cn
http://0YmxfOdc.xtqLd.cn
http://KvoJtGiA.xtqLd.cn
http://HiGaN2aI.xtqLd.cn
http://tk8xYw5t.xtqLd.cn
http://VXMZi7YR.xtqLd.cn
http://31vHAq3U.xtqLd.cn
http://Z6dfYMGv.xtqLd.cn
http://e5F0OoYp.xtqLd.cn
http://EjJxPmtr.xtqLd.cn
http://XeG3WlEv.xtqLd.cn
http://NiyWNM12.xtqLd.cn
http://cfy2sjhc.xtqLd.cn
http://khHpMDDL.xtqLd.cn
http://XiD5Fgpn.xtqLd.cn
http://www.dtcms.com/a/376927.html

相关文章:

  • Java大厂面试实录:在线教育场景下微服务架构与智能推荐实践(含技术详解)
  • 实战:HarmonyOS 中 HEIF 图像开发全流程(转码篇 兼容场景)
  • 融智学生活方式DBA 小生境融智:身心健康就是美,抓住刚需就是赢
  • 【高级】系统架构师 | 2025年上半年综合真题DAY3
  • CentOS 7部署Zabbix5.0
  • [rStar] 策略与奖励大语言模型
  • 使用命令centos把普通用户设置为管理员
  • 机器学习实操项目03——Scikit-learn介绍及简单分类案例
  • 了解网站安全监测系统的重要性
  • 图像尺寸和CMOS的关联
  • 视频转webp批量处理工具哪个好?这里有答案
  • cuda-NCCL笔记(3)-- 分布式训练LeNet
  • Android Studio开发环境配置
  • 【springboot+vue3】博客论坛管理系统(源码+文档+调试+基础修改+答疑)
  • 中台的万象
  • 从Grok 4多智能体协同到RAG范式革命:2025年AI工作流的技术重构
  • pythonFlask 使用 SQLAlchemy 的连接池
  • 【系统架构设计(25)】Web应用服务器与现代架构
  • minikube 的 kubernetes 入门教程-Nginx Proxy Manager
  • ‌Git Bisect 二分查找定位错误总结
  • 基于大数据挖掘的药品不良反应知识整合与利用研究
  • Git 命令教程
  • springboot synchronized 本地锁入门与实战
  • 【竞赛系列】机器学习实操项目08——全球城市计算AI挑战赛(数据可视化分析)
  • Nginx 实战系列(八)—— Nginx SSL/TLS 配置指南
  • Python函数详解及*args、**kwargs用法
  • 零基础3个月上岸[特殊字符]自学数据分析路线
  • Java多线程(一)
  • pyspark读取hive表中数据后进行lgb建模
  • LeetCode 热题 42.接雨水(双指针写法)