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

【JVM 常用工具命令大全】

一、图形化工具

1. JConsole

  • 启动命令

    jconsole
    
  • 功能

    • 监控堆内存、线程、类加载情况
    • 查看 MBean 信息
    • 监控 CPU 使用率
    • 支持远程连接 JMX

2. VisualVM

  • 启动命令

    jvisualvm
    
  • 功能

    • 更强大的性能分析功能
    • 支持插件扩展(如 GC 插件)
    • 线程转储分析
    • 内存采样和 CPU 分析
    • 支持快照对比

二、命令行工具

1. jstat —— JVM 统计监控工具

  • 命令格式

    jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
    
    • < > 必须参数
    • [ ] 可选参数
  • 常用选项

    选项说明
    -class类加载统计
    -gcGC 堆状态
    -gccapacity各区容量
    -gcutilGC 统计汇总
    -gccause最近 GC 原因
    -gcnew新生代统计
    -gcold老年代统计
  • 示例

    # 每 1 秒打印一次 GC 情况,共打印 5 次
    jstat -gcutil -h5 <pid> 1000 5# 带时间戳输出
    jstat -gc -t <pid> 1000
    

2. jstack —— 线程堆栈分析

  • 命令格式

    jstack [-l] [-F] <pid>
    
  • 常用参数

    参数说明
    -l长列表,打印锁的附加信息
    -F强制 dump(当 jstack 无响应时使用)
    -m混合模式(Java 和 Native 帧)
  • 示例

    # 获取线程 dump 并输出到文件
    jstack -l 1234 > thread_dump.txt# 查找 CPU 高的线程(配合 top 命令)
    top -H -p <pid>
    printf "%x\n" <nid>     # 将线程 ID 转为 16 进制
    jstack <pid> | grep -A 20 <nid_hex>
    

3. jmap —— 内存分析工具

  • 命令格式

    jmap [option] <pid>
    
  • 常用选项

    选项说明
    -heap显示堆概要信息
    -histo[:live]显示堆中对象统计(live 表示只统计存活对象)
    -dump生成堆转储快照
    -finalizerinfo显示等待 finalizer 的对象
  • 示例

    # 生成堆 dump 文件(生产环境慎用,会 STW)
    jmap -dump:format=b,file=heap.hprof 1234# 显示存活对象统计
    jmap -histo:live 1234 | head -20
    

4. jinfo —— 配置信息工具

  • 命令格式

    jinfo [option] <pid>
    
  • 常用功能

    # 查看所有系统属性
    jinfo -sysprops <pid># 查看指定 JVM 参数
    jinfo -flag MaxHeapSize <pid># 动态修改部分参数(仅支持可写的参数)
    jinfo -flag +PrintGCDetails <pid>
    

三、实用技巧

1. 组合使用示例

# 1. 找到目标应用的 PID
jps -mlvV | grep <app_name># 2. 观察 GC 情况
jstat -gcutil <pid> 1000 5# 3. 分析线程
jstack <pid> > thread.txt# 4. 查看对象分布
jmap -histo:live <pid> | head -20

2. 生产环境注意事项

  • jmap -dump 会导致 STW(Stop-The-World),谨慎使用
  • 优先使用 jcmd GC.heap_dump 替代 jmap
  • 线程 dump 建议连续做 3 次(间隔 5 秒)
  • 使用 -F 参数时,可能造成 JVM 暂停更久

3. 常用分析流程

  • 高 CPUtop -Hjstack → 16 进制线程 ID 匹配
  • 内存泄漏jmap -histo → 分析大对象 → jmap -dump → MAT 分析
  • GC 问题jstat -gcutil → 分析各分区变化
http://www.dtcms.com/a/392937.html

相关文章:

  • 从iload_1 iload_2 iadd字节码角度看jvm字节码执行
  • openssl 启用AES NI加速对AES加密性能影响的测试
  • LeetCode:32.随机链表的复制
  • 基于SpringBoot+Vue的旅游系统【协同过滤推荐算法+可视化统计】
  • 前端实现一个星空特效的效果(实战+讲解)
  • 【嵌入式】【科普】软件模块设计简介
  • 【ROS2】ROS2通讯机制Topic常用命令行
  • 欧姆龙NJ系列PLC编程标准化案例
  • 【OpenGL】LearnOpenGL学习笔记25 - 法线贴图 NormalMap
  • UE5 基础应用 —— 09 - 行为树 简单使用
  • 客户端实现信道管理
  • 异常解决记录 | Yarn NodeManager 注册异常
  • 【C#】C# 调用 Python 脚本正确姿势:解决 WaitForExit 死锁与退出检测问题
  • Java25新特性
  • 卷积神经网络CNN-part9-DenseNet
  • 深入浅出密码学第一章课后题(持续更新)
  • Mysql 入门概览
  • 大模型中权重共享的作用?
  • 【精品资料鉴赏】55页可编辑PPT详解 数字化高校智慧后勤解决方案
  • LLM大模型 - 实战篇 - AI Agents的开发应用
  • 【分布式技术】RedisShake相关功能详细介绍
  • qsv:一款高性能的CSV数据处理工具
  • `html` 将视频作为背景
  • 口播提词器怎么选?手机提词器实测指南与参数推荐
  • 解剖线性表
  • 计算数学研究方向有哪些细分领域?
  • [xboard]08-Makefile逐行分析2
  • Clash 中 REJECT 的技术原理与解决方案 —— 以哔哩哔哩延迟问题为例
  • 庖丁解牛与专家思维:道家的“心手合一”训练法
  • matlab通过GUI实现点云的读取、自定义显示和保存