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

JDK自带工具解析与生产问题定位指南(一)

1. 引言

Java开发工具包(JDK)内置了强大的诊断工具集,用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具,包括jps、jmap、jstat、jcmd、jstack、jvisualvm等,并提供它们的具体应用场景及使用方法,来帮助开发者快速定位运行时问题。


JDK诊断工具全解析与实战指南

一、核心命令行工具详解

1. 进程管理工具 jps

场景

jps是Java自带的一个命令行工具,用于显示当前系统中所有Java应用程序的简要信息。它对于快速获取运行中的Java进程ID(PID)及其主类名非常有用,尤其是在需要连接到特定进程进行进一步分析或管理时。

使用方法
  • 查看所有Java进程的基本信息:只需简单地执行jps命令。
  • 获取更详细的信息:可以通过添加参数如-l来显示完整包路径的主类名,-m来查看传递给main方法的参数,或者-v来查看传递给JVM的选项。在Linux系统中,常使用ps -ef | grep java来过滤出所有包含“java”字符串的进程的详细信息。有了jps可以精确地定位到特定的Java应用程序的进程。如果只是为了查java程序的进程号,jps -l可能会更加简洁的列出你想查找的内容。
jps -q  # 仅显示进程ID(PID)
jps -l  # 显示完整包路径
jps -v  # 显示JVM启动参数
jps -m  # 显示main方法参数
参数功能说明示例
-q只显示 PIDjps -q → 38721
-m显示 main 方法参数jps -m → 38721 MyApp arg1
-l显示完整包名/jar路径jps -l → com.example.Main
-v显示 JVM 参数jps -v → -Xmx1024m
-V显示 JVM 参数(不包含应用参数)jps -V → -XX:MaxPermSize=256m

2. 内存分析工具 jmap

场景

jmap用于生成Java堆的快照(heap dump),这对于诊断内存泄漏等问题至关重要。此外,它还可以显示Java进程的内存映射或共享对象统计信息。

使用方法
  • 创建堆转储文件:jmap -dump:format=b,file=heap.bin <pid>,其中<pid>为Java进程ID。
  • 查看对象分配直方图:jmap -histo <pid>可以列出每个类实例的数量和总大小。
1. 标准参数
jmap [option] <pid>
参数功能说明注意事项
-heap显示堆内存分布可能导致服务暂停
-histo[:live ]对象内存直方图统计live 参数触发 Full GC
-clstats类加载器统计(JDK8+)需要 attach 权限
-finalizerinfo显示等待 finalization 的对象输出信息有限
-dump:生成堆转储文件示例:format=b,file=heap.bin
2. 堆转储选项
jmap -dump:live,format=b,file=heap.hprof 38721
选项说明
live只转储存活对象
format=b二进制格式(必须)
file=输出文件名
compression=6压缩级别(0-9,JDK13+)

在这里插入图片描述


3. 线程分析工具 jstack

场景

jstack用来生成Java进程的线程转储,这有助于理解程序在某一时刻的线程状态,主要用于捕获线程执行堆栈 、诊断死锁/CPU热点 。 对于排查死锁、响应慢等问题特别有效。

使用方法
  • 打印线程转储:jstack <pid>直接输出线程转储信息到标准输出。
  • 将线程转储保存到文件:jstack <pid> > thread_dump.txt
jstack -l <pid>  # 显示锁附加信息
jstack -F <pid>  # 强制生成线程快照(用于挂起进程)
jstack -m <pid>  # 混合模式(显示Java和Native栈帧)
参数功能说明使用场景
-F强制生成线程快照进程无响应时使用
-l显示锁信息(长格式)分析死锁必备
-m混合模式(显示 native 栈)JNI 调用问题分析
-J传递参数到 JVM示例:-J-d64 使用64位模式

4. 统计监控工具 jstat

场景

jstat提供了对Java应用程序性能和资源使用的监控能力,特别是关于垃圾回收(GC)、编译时间等方面的统计数据。

使用方法
  • 监控垃圾回收活动:jstat -gcutil <pid> 1000每秒打印一次GC统计信息。
jstat -gcutil <pid> 1000 5  # 每1秒采样GC数据,共5次
jstat -class <pid>          # 类加载统计
jstat -compiler <pid>       # JIT编译统计
核心监控选项
参数监控指标关键字段说明
-gc堆内存各区域容量EC/EU: Eden区容量/使用量
-gccapacity内存池最大/最小容量OGCMN: 老年代最小容量
-gcutil内存使用百分比O: Old区使用率,FGC: Full GC次数
-gccauseGC 原因统计LGCC: 上次GC原因
-gcnew新生代详细统计TT/MTT: 晋升阈值
-gcold老年代元空间统计MU: 元空间使用量
-compilerJIT 编译统计Failed: 编译失败次数
-class类加载统计Loaded: 已加载类数量

5.查看/修改 JVM 参数jinfo

场景

jinfo是一个非常实用的命令行工具,用于实时查看和修改正在运行中的Java应用程序的系统属性和JVM标志。它特别适用于需要动态调整JVM参数或检查某个Java进程是否启用了特定的JVM选项时使用。这对于调试、性能调优以及故障排查都非常有帮助。

使用方法
  • 查看所有JVM标志:可以通过jinfo -flags <pid>来查看指定Java进程的所有JVM启动参数。
  • 修改JVM标志(仅限可变标志):对于支持动态修改的JVM标志,可以使用jinfo -flag [+|-]<name>=<value> <pid>的形式进行在线调整。请注意,并非所有的JVM标志都支持这种操作方式。
jinfo [option] <pid>
参数功能说明示例
-flags显示所有参数jinfo -flags 38721
-sysprops显示系统属性jinfo -sysprops 38721
查看具体参数值jinfo MaxHeapSize 38721
-flag =动态修改参数jinfo -flag +HeapDumpOnOutOfMemoryError 38721

二、高级诊断工具专题

全能诊断工具 jcmd(JDK 7+)

场景

jcmd是一个多功能工具,它可以向正在运行的Java进程中发送各种诊断命令,例如触发堆转储、线程转储、GC日志记录等。

使用方法

jcmd <pid> help                   # 查看可用命令列表
jcmd <pid> VM.flags               # 查看所有JVM参数
jcmd <pid> GC.heap_dump filename=heap.hprof  # 生成堆转储
jcmd <pid> Thread.print           # 生成线程快照
版本功能差异:
功能JDK 8 支持JDK 11+ 增强功能
JFR 控制✅ 基础功能免授权
Native 内存分析✅ 支持详细NMT数据
诊断命令数量40+60+(新增网络诊断等命令)

1. 基础命令

jcmd <pid> help  # 查看支持的命令
命令分类示例命令功能说明
JVM 信息VM.version显示 JVM 版本
VM.command_line显示启动命令
内存分析GC.class_histogram类实例统计
GC.heap_dump filename=heap.hprof生成堆转储
线程分析Thread.print生成线程快照
Thread.dump_to_file -format=text filename=threads.txt导出线程信息

2. 高级诊断(JDK11+)

命令功能说明
JVMTI.data_dump生成 JVMTI 数据转储
Compiler.codecache显示代码缓存使用情况
VM.native_memoryNative 内存分析

3. 飞行记录器 JFR(JDK 11+)

# 开启60秒记录(需要JDK 11+)
jcmd <pid> JFR.start name=app_profile duration=60s filename=recording.jfr# 导出记录文件
jcmd <pid> JFR.dump name=app_profile filename=recording.jfr
参数作用说明推荐配置
name记录会话名称建议使用有意义的命名
duration记录持续时间生产环境建议5-10分钟
filename输出文件路径确保磁盘空间充足

三、 图形化工具

工具功能特点
JConsole实时监控堆/线程/类加载/MBean
VisualVM支持堆转储分析/CPU Profiling/线程跟踪(需安装插件)
MATEclipse Memory Analyzer(需单独下载)

JConsole、VisualVM和MAT都是针对Java虚拟机(JVM)的性能分析和监控工具,它们在Java开发领域中发挥着重要作用。三者均提供对内存、线程和GC行为的分析能力,但在功能侧重上形成互补:JConsole作为轻量级监控工具,通过JMX协议实现实时指标可视化,适合基础性能观测;VisualVM作为集成化分析平台,兼具实时监控、CPU/内存采样分析、线程追踪等综合能力,支持插件扩展实现高级诊断;MAT则专精于堆转储文件的深度解析,通过对象支配树、内存泄漏检测等特性,为内存类问题提供根源性诊断方案。具体使用方案,将在下一篇文章详细介绍,敬请期待!

推荐学习路径

基础工具
线上问题定位
性能优化
JVM原理
定制化解决方案

专家建议:建立诊断知识库,记录典型问题的排查路径和工具使用组合,可提升团队整体排障效率30%以上。

相关文章:

JDK自带工具解析与生产问题定位指南(一)

1. 引言 Java开发工具包&#xff08;JDK&#xff09;内置了强大的诊断工具集&#xff0c;用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具&#xff0c;包括jps、jmap、jstat、jcmd、jstack、…...

FPGA 使用 CLOCK_DEDICATED_ROUTE 约束

使用 CLOCK_DEDICATED_ROUTE 约束 CLOCK_DEDICATED_ROUTE 约束通常在从一个时钟区域中的时钟缓存驱动到另一个时钟区域中的 MMCM 或 PLL 时使 用。默认情况下&#xff0c; CLOCK_DEDICATED_ROUTE 约束设置为 TRUE &#xff0c;并且缓存 /MMCM 或 PLL 对必须布局在相同…...

《解锁AI黑科技:数据分类聚类与可视化》

在当今数字化时代&#xff0c;数据如潮水般涌来&#xff0c;如何从海量数据中提取有价值的信息&#xff0c;成为了众多领域面临的关键挑战。人工智能&#xff08;AI&#xff09;技术的崛起&#xff0c;为解决这一难题提供了强大的工具。其中&#xff0c;能够实现数据分类与聚类…...

Java小白入门教程:Object

目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中&#xff0c; object…...

记6(人工神经网络

目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络&#xff08;Feedforward Neural Networks&#xff09;5、鸢尾花数据集——单层前馈型神经网络&#xff1a;6、多层神经网络&#xff1a;增加隐含层7、实现异或运算&#xff08;01、10为1,00、11为0&#xff09;8、线性…...

stm32硬件实现与w25qxx通信

使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册&#xff0c;采用B12-B15四个引脚与W25Q64连接&#xff0c;实现SPI通信。 W25Q64SCK&#xff08;CLK&#xff09;PB13MOSI&#xff08;DI&#xff09;PB15MISO(DO)PB14CS&#xff08…...

编程题-最接近的三数之和

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 解法一&#xff08;排序双指针&#xff09;&#xff1a; 题目要求找…...

索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢

索引的底层数据结构 MySQL中常用的是Hash索引和B树索引 Hash索引&#xff1a;基于哈希表实现的&#xff0c;查找速度非常快&#xff0c;但是由于哈希表的特性&#xff0c;不支持范围查找和排序&#xff0c;在MySQL中支持的哈希索引是自适应的&#xff0c;不能手动创建 B树的…...

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…...

网络编程套接字(中)

文章目录 &#x1f34f;简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 &#x1f350;多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务 &#x1…...

前端学习-事件委托(三十)

目录 前言 课前思考 for循环注册事件 语法 事件委托 1.事件委托的好处是什么? 2.事件委托是委托给了谁&#xff0c;父元素还是子元素 3.如何找到真正触发的元素 示例代码 总结 前言 才子佳人&#xff0c;自是白衣卿相 课前思考 1.如果同时给多个元素注册事件&…...

线程池以及在QT中的接口使用

文章目录 前言线程池架构组成**一、任务队列&#xff08;Task Queue&#xff09;****二、工作线程组&#xff08;Worker Threads&#xff09;****三、管理者线程&#xff08;Manager Thread&#xff09;** 系统协作流程图解 一、QRunnable二、QThreadPool三、线程池的应用场景W…...

c语言操作符(详细讲解)

目录 前言 一、算术操作符 一元操作符&#xff1a; 二元操作符&#xff1a; 二、赋值操作符 代码例子&#xff1a; 三、比较操作符 相等与不相等比较操作符&#xff1a; 大于和小于比较操作符&#xff1a; 大于等于和小于等于比较操作符&#xff1a; 四、逻辑操作符 逻辑与&…...

【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现

文章目录 介绍Transformer核心组件架构图编码器&#xff08;Encoder&#xff09;解码器&#xff08;Decoder&#xff09; 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页&#xff1a;道友老李 欢迎加入社…...

JavaScript 入门教程

JavaScript 入门教程 JavaScript 入门教程引言学习 JavaScript 的好处常见的 JavaScript 框架和库 安装开发环境下载并安装 Node.js 和 npm安装常用开发工具&#xff08;如 VS Code&#xff09;配置本地开发环境 基础语法入门数据类型变量与常量运算符算术运算符比较运算符 条件…...

浅析CDN安全策略防范

CDN&#xff08;内容分发网络&#xff09;信息安全策略是保障内容分发网络在提供高效服务的同时&#xff0c;确保数据传输安全、防止恶意攻击和保护用户隐私的重要手段。以下从多个方面详细介绍CDN的信息安全策略&#xff1a; 1. 数据加密 数据加密是CDN信息安全策略的核心之…...

代码随想录刷题day22|(字符串篇)344.反转字符串、541.反转字符串 II

目录 一、题目思路 二、相关题目 三、总结与知识点 3.1 字符数组转换成字符串 一、题目思路 344反转字符串比较容易&#xff0c;双指针即可在空间复杂度为O(1)的基础上解决&#xff1b; 541反转字符串II &#xff1a;其中for循环中 i 每次的取值&#xff0c;不是 i&#…...

python学opencv|读取图像(五十三)原理探索:使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习进程中&#xff0c;已经探索了使用cv.matchTemplate()函数实现最佳图像匹配的技巧&#xff0c;并且成功对两个目标进行了匹配。 相关文章链接为&#xff1a;python学opencv|读取图像&#xff08;五十二&#xff09;使用cv.matchTemplate()函数实现最佳图像…...

win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)

win10部署本地deepseek-r1&#xff0c;chatbox&#xff0c;deepseek联网&#xff08;谷歌网页插件Page Assist&#xff09; 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车&#xff0c;进行下载 ste…...

冯·诺依曼体系结构

目录 冯诺依曼体系结构推导 内存提高冯诺依曼体系结构效率的方法 你使用QQ和朋友聊天时&#xff0c;整个数据流是怎么流动的&#xff08;不考虑网络情况&#xff09; 与冯诺依曼体系结构相关的一些知识 冯诺依曼体系结构推导 计算机的存在就是为了解决问题&#xff0c;而解…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...