目录

一、JVM故障处理工具概述

二、详细工具解析

1. jps:虚拟机进程状况工具

2. jstat:虚拟机统计信息监视工具

3. jinfo:Java配置信息工具

4. jmap:Java内存映像工具

5. jhat:堆转储快照分析工具

6. jstack:Java堆栈跟踪工具

7. jcmd:综合诊断命令工具

三、可视化工具

1. jconsole

2. VisualVM

四、工具使用场景总结

五、实战建议

六、高级技巧


一、JVM故障处理工具概述

Java虚拟机(JVM)提供了丰富的故障处理工具,可以帮助开发者快速诊断和解决运行时问题。这些工具主要分为以下几类:

  1. ​进程状态工具​​:jps

  2. ​统计监控工具​​:jstat

  3. ​配置信息工具​​:jinfo

  4. ​内存分析工具​​:jmap, jhat

  5. ​堆栈分析工具​​:jstack

  6. ​综合诊断工具​​:jcmd

  7. ​可视化工具​​:jconsole, VisualVM等

二、详细工具解析

1. jps:虚拟机进程状况工具

​功能​​:列出正在运行的虚拟机进程及其主类名、JVM参数等信息

​常用命令​​:

jps -q      # 只显示进程ID
jps -m      # 显示传递给main方法的参数
jps -l      # 显示主类的全名
jps -v      # 显示JVM参数

​示例输出​​:

1234 Jps
5678 MyApplication

2. jstat:虚拟机统计信息监视工具

​功能​​:监控类加载、内存、GC等JVM运行数据

​常用选项​​:

jstat -class <pid>       # 类加载统计
jstat -gc <pid>          # GC堆行为统计
jstat -gccapacity <pid>  # 堆内存统计
jstat -gcutil <pid>      # GC统计摘要
jstat -printcompilation <pid> # JIT编译统计

​示例​​(监控GC情况,每1秒刷新一次,共10次):

jstat -gcutil 5678 1000 10

3. jinfo:Java配置信息工具

​功能​​:查看和修改虚拟机参数

​常用命令​​:

jinfo <pid>              # 查看所有参数
jinfo -flags <pid>       # 查看显式设置的参数
jinfo -sysprops <pid>    # 查看系统属性
jinfo -flag <name> <pid> # 查看特定参数值

​示例​​(查看最大堆内存设置):

jinfo -flag MaxHeapSize 5678

4. jmap:Java内存映像工具

​功能​​:生成堆转储快照、查询堆内存信息

​常用命令​​:

jmap -heap <pid>         # 显示堆详细信息
jmap -histo <pid>       # 显示堆中对象统计
jmap -dump:format=b,file=heap.hprof <pid> # 生成堆转储文件

​示例​​(生成堆转储文件):

jmap -dump:live,format=b,file=myapp.hprof 5678

5. jhat:堆转储快照分析工具

​功能​​:分析jmap生成的堆转储文件

​使用方法​​:

jhat heap.hprof

启动后访问 http://localhost:7000查看分析结果

​注意​​:jhat功能较为基础,生产环境建议使用MAT(Eclipse Memory Analyzer)等更强大的工具

6. jstack:Java堆栈跟踪工具

​功能​​:生成虚拟机当前时刻的线程快照

​常用命令​​:

jstack <pid>            # 打印线程堆栈
jstack -l <pid>         # 打印锁信息
jstack -F <pid>         # 强制dump(当jvm无响应时)

​示例​​(将堆栈信息输出到文件):

jstack 5678 > thread_dump.txt

7. jcmd:综合诊断命令工具

​功能​​:集成了多种诊断功能的综合工具

​常用命令​​:

jcmd <pid> help         # 查看支持的命令
jcmd <pid> VM.flags     # 查看JVM参数
jcmd <pid> VM.uptime    # 查看JVM运行时间
jcmd <pid> GC.heap_info # 查看堆信息
jcmd <pid> Thread.print # 打印线程堆栈
jcmd <pid> GC.run       # 触发Full GC

三、可视化工具

1. jconsole

Java自带的监控管理控制台,可监控内存、线程、类、MBean等

启动方式:

jconsole

2. VisualVM

功能更强大的可视化工具,支持:

  • 应用程序快照

  • CPU和内存 profiling

  • 线程分析

  • MBean查看等

四、工具使用场景总结

问题类型

推荐工具

进程查看

jps

内存泄漏

jmap, jhat, VisualVM

CPU占用高

jstack, VisualVM

死锁

jstack -l

GC问题

jstat, jcmd GC.*

参数查看/修改

jinfo, jcmd VM.flags

综合诊断

jcmd

五、实战建议

  1. ​定期收集基线数据​​:在系统正常时使用这些工具收集数据,作为问题诊断的基准

  2. ​组合使用工具​​:如先用jps找到问题进程,再用jstat监控GC,最后用jmap生成堆转储

  3. ​自动化监控​​:考虑将关键指标(jstat数据等)纳入监控系统

  4. ​生产环境谨慎使用​​:某些命令(如jmap -dump)会导致JVM暂停,应在低峰期使用

六、高级技巧

  1. ​远程连接​​:大多数工具支持连接远程JVM(需配置JMX等)

  2. ​自动化分析​​:结合shell脚本实现自动化诊断

  3. ​与日志结合​​:将工具输出与应用日志关联分析

  4. ​使用替代工具​​:对于复杂问题,考虑使用Arthas、MAT等更专业的工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919492.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919492.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919492.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode热题100道笔记+动画】接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水…

短剧小程序系统开发:构建影视娱乐新生态的基石

在移动互联网的浪潮中&#xff0c;影视娱乐行业正经历着深刻的变革。短剧&#xff0c;作为一种新兴的内容形式&#xff0c;以其独特的魅力和广泛的受众基础&#xff0c;成为了行业发展的新亮点。而短剧小程序系统开发&#xff0c;则是构建影视娱乐新生态的基石&#xff0c;为行…

基于Pytochvideo训练自己的的视频分类模型

视频分类模型简介 ​X3D 系列模型 官方网站 https://github.com/facebookresearch/SlowFast ​提出论文​ Facebook Research 的《X3D: Expanding Architectures for Efficient Video Recognition》 https://arxiv.org/pdf/2004.04730 原理 X3D 的设计思路受到机器学习中…

LidaRefer-v2论文速读

研究背景 研究背景 3D视觉定位&#xff08;3D Visual Grounding, VG&#xff09;是一项旨在根据自然语言描述&#xff0c;在三维场景中精确定位出相应物体或区域的任务 。这项技术在人机交互领域至关重要&#xff0c;尤其是在自动驾驶、机器人技术和AR/VR等应用中&#xff0c;它…

逻辑移位与算术移位

根本的区别在于&#xff1a;它们如何对待符号位&#xff08;最高位&#xff09;。 一、逻辑移位 (Logical Shift) 无论左移、右移&#xff0c;空出的位永远用 0 填充。主要针对无符号整数、快速乘除2的幂。 二、算术移位 (Arithmetic Shift) 左移用 0 填充、右移用符号位填充。…

内存对齐的使用和禁用

在 C 语言和 C 中&#xff0c;__attribute__((packed)) 是一种用于数据结构体的编译器扩展属性&#xff0c;这个属性主要用于修改结构体的内存对齐行为。背景知识&#xff1a;结构体内存对齐在许多计算机架构中&#xff0c;编译器会自动对数据进行对齐&#xff08;alignment&am…

SpringBoot3后端项目介绍:mybig-event

mybig-event 项目简介 mybig-event 是一个基于 Spring Boot 的事件管理系统&#xff0c;提供用户管理、文章发布、分类管理、文件上传等功能&#xff0c;采用现代化的 Java 技术栈构建&#xff0c;支持高效开发和部署。 仓库链接&#xff1a;https://github.com/foorgange/mybi…

week3-[分支嵌套]方阵

week3-[分支嵌套]方阵 题目描述 有 nmn\times mnm 个人站成 nnn 行 mmm 列的方阵。我们想知道第 xxx 行 yyy 列的人的某个方向有没有人。 输入格式 输入共 222 行。 第 111 行输入 444 个正整数 n,m,x,yn,m,x,yn,m,x,y。 第 222 行输入 111 个字符为 U、D、L、R 其中之一&#…

深入理解C++ std::shared_ptr:现代C++内存管理的艺术与实践

在C++的发展历程中,内存管理始终是开发者面临的核心挑战。从C语言继承而来的手动内存管理方式,虽然提供了极大的灵活性,却也成为无数程序错误的根源。内存泄漏、悬空指针、双重释放等问题长期困扰着C++开发者,直到智能指针的出现改变了这一局面。作为C++11标准引入的重要特…

一个 WPF 文档和工具窗口布局容器

一个 WPF 文档和工具窗口布局容器、用于排列文档 和工具窗口的方式与许多知名 IDE 类似&#xff0c;例如 Eclipse、Visual Studio、 PhotoShop 等等 AvalonDock 是一个 WPF 文档和工具窗口布局容器&#xff0c;用于排列文档 和工具窗口的方式与许多知名 IDE 类似&#xff0c;例…

【qml-5】qml与c++交互(类型单例)

背景&#xff1a; 【qml-1】qml与c交互第一次尝试&#xff08;实例注入&#xff09; 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试&#xff08;类型注册&#xff09; 【qml-4】qml与c交互&#xff08;类型多例&#xff09; 【qml-5】qml与c交互&#…

循环神经网络(RNN)、LSTM 与 GRU (一)

循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU &#xff08;一&#xff09; 文章目录循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU &#xff08;一&#xff09;循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU一、RNN&#xff08;Recurrent Neural N…

【AAOS】Android Automotive 16模拟器源码下载及编译

源码下载repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r2 repo sync -c --no-tags --no-clone-bundle源码编译source build/envsetup.sh lunch sdk_car_x86_64-bp2a-eng make -j8运行效果emualtorHomeAll appsSettingsHAVCNotification…

jvm三色标记

好的&#xff0c;咱们把专业概念和生活例子结合起来&#xff0c;一步一步说清楚三色标记法&#xff1a;一、核心概念&#xff1a;用“颜色”给对象贴“状态标签”就像给家里的物品贴标签&#xff0c;每种颜色代表它在“垃圾回收&#xff08;大扫除&#xff09;”中的状态&#…

生成式AI的能力边界与职业重构:从“百科实习生“到人机协作增强器

根据微软最新研究&#xff0c;基于20万条Copilot使用数据及用户反馈&#xff0c;研究者揭示了生成式AI在实际应用中的能力边界与职业影响。数据显示&#xff0c;用户使用AI助手最频繁的任务是信息获取&#xff08;占比近40%&#xff09;&#xff0c;其次是公众沟通类工作&#…

java17学习笔记

Java17是一个重要的特性发布&#xff0c;也是比较常用的一个版本&#xff0c;根据 2024Java生态统计&#xff0c;Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。它遵循了自Java10以来引入的Java发布步调&#xff0c;并于2021年 9 月 14 日发布&#xff0c;在Java16发布后…

【AI应用】修改向量数据库Milvus默认密码

说明&#xff1a; 1&#xff09;部署向量数据库milvus运行一段时间后&#xff0c;想开启密码认证登录attu页面 2&#xff09;开启密码认证登录&#xff0c;提示用户和密码不正确&#xff0c;因为默认密码已存储在物理机 3&#xff09;通过attu管理页面修改向量数据库milvus默认…

分布式系统消息队列:可靠投递与延时消息实战

在分布式系统架构中&#xff0c;消息队列&#xff08;MQ&#xff09;作为解耦服务、削峰填谷、异步通信的核心组件&#xff0c;其消息投递的可靠性与延时消息的精准性直接影响业务系统的稳定性。本文结合实际业务场景&#xff0c;详细解析消息投递的全流程设计与延时消息的通用…

Java 学习笔记(基础篇6)

面向对象基础1. 类和对象(1) 示例&#xff1a;public class Student {String name "张三";int age 23;public void study() {System.out.println("学习 Java");}public void eat() {System.out.println("吃饭");} }public class Test {public …

光学件加工厂倚光科技:陪跑光学未来力量

在光学创新的漫漫长路上&#xff0c;总有一些看似 “不划算” 的坚持&#xff0c;却在悄然改写行业的未来。倚光科技的故事&#xff0c;就始于这样一种选择 —— 明知光学打样利润微薄&#xff0c;明知上百个项目中能走到量产的寥寥无几&#xff0c;仍愿意投入全球顶尖的设备与…