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

【jvm第7集】jvm调优工具(命令行工具)

文章目录

  • JVM 调优工具(命令行工具)
    • jps(Java Virtual Machine Process Status Tool)
    • jstat(JVM Statistics Monitoring Tool)
    • jmap(Memory Map Tool)
    • jstack(Thread Stack Tool)
    • jinfo(Java Configuration Info Tool)
    • jvisualvm(VisualVM)
  • 工具组合使用示例
    • 场景 1:定位内存泄漏
    • 场景 2:分析 CPU 高占用
    • 场景 3:优化 GC 配置
  • 注意事项

JVM 调优工具(命令行工具)

jps(Java Virtual Machine Process Status Tool)

  • 输入参数
参数说明
-l显示主类的完整路径或 JAR 文件名。
-q仅显示进程 ID(不显示主类名)。
-m显示传递给 main 方法的参数。
-v显示 JVM 启动参数(如 -Xmx-Xms)。
-V显示通过 .hotspotrc 文件传递的 JVM 参数。
  • 输出示例
# jps -l 输出示例
12345 /path/to/MyApplication.jar
67890 com.example.MyMainClass
  • 输出字段解释
    • 进程 ID:Java 进程的唯一标识符。
    • 主类名或 JAR 文件名:启动 Java 程序的主类或 JAR 包路径。
    • JVM 参数(当使用 -v 时):显示 -Xmx-Xms 等配置参数。

jstat(JVM Statistics Monitoring Tool)

  • 输入参数
参数说明
-class类加载/卸载统计(类数、占用空间、耗时)。
-gc显示 GC 堆行为(Eden、Survivor、Old Gen 的容量和使用量)。
-gcutil显示 GC 摘要信息(各区域使用百分比)。
-gccapacity显示各区域容量阈值(最小/最大容量)。
-gcnew显示新生代 GC 情况。
-gcold显示老年代 GC 情况。
-gccause显示最近一次 GC 的原因。
  • 输出示例
# jstat -gc <pid> 输出示例S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
1024.0 1024.0  0.0    0.0   8192.0   2048.0   16384.0     4096.0   6144.0  1536.0  512.0   128.0     4      0.020     1      0.010    0.030
  • 输出字段解释
字段含义
S0C/S1CSurvivor 区总容量(KB)
S0U/S1USurvivor 区已使用容量(KB)
EC/EUEden 区总容量/已使用容量(KB)
OC/OU老年代总容量/已使用容量(KB)
MC/MU元空间总容量/已使用容量(KB)
CCSC/CCSU压缩类空间总容量/已使用容量(KB)
YGC/YGCT年轻代 GC 次数/总耗时(秒)
FGC/FGCTFull GC 次数/总耗时(秒)
GCT所有 GC 总耗时(秒)

jmap(Memory Map Tool)

  • 输入参数
参数说明
-heap显示堆内存详细配置(堆大小、GC 器类型)。
-histo显示堆中对象的直方图(对象数量、占用内存)。
-histo:live显示存活对象的直方图(触发 Full GC)。
-dump:format=b,file=<file>生成堆转储文件(二进制格式)。
-finalizerinfo显示等待终结的对象信息。
-clstats显示类加载器统计信息。
  • 输出示例
# jmap -histo <pid> 输出示例num     #instances         #bytes  class name
---------------------------------------------1:       1000000       80000000  [C2:        500000       40000000  java.lang.String3:        200000       20000000  [B
  • 输出字段解释
字段含义
num排名(按占用内存降序)
#instances对象实例数
#bytes对象占用内存(字节)
class name类名(如 [C 表示 char[]

jstack(Thread Stack Tool)

  • 输入参数
参数说明
-l显示锁信息(如持有的锁、等待的锁)。
-m显示混合模式堆栈(Java + Native 堆栈)。
-F强制生成线程转储(适用于无响应的进程)。
  • 输出示例
# jstack <pid> 输出示例
"main" #1 prio=5 os_prio=31 tid=0x00007f8e3c000000 nid=0x12345 runnable [0x0000700000000000]java.lang.Thread.State: RUNNABLEat java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.read(SocketInputStream.java:152)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)...
  • 输出字段解释
字段含义
线程名线程名称(如 main)。
状态线程状态(如 RUNNABLEBLOCKED)。
堆栈跟踪方法调用链,用于定位代码位置。
锁信息-l 参数)显示线程持有的锁或等待的锁。

jinfo(Java Configuration Info Tool)

  • 输入参数
参数说明
-flags显示所有 JVM 参数。
-flag <name>查看指定 JVM 参数的值。
-flag [+/-]<name>开启或关闭 JVM 参数。
-flag <name>=<value>设置 JVM 参数的值。
-sysprops显示系统属性(如 java.version)。
  • 输出示例
# jinfo -flags <pid> 输出示例
VM Flags:
-XX:CICompilerCount=4 
-XX:InitialHeapSize=536870912 
-XX:MaxHeapSize=1073741824 
-XX:+PrintCommandLineFlags 
...
  • 输出字段解释
    • JVM 参数:显示 -XX 参数的当前值(如 MaxHeapSize)。
    • 系统属性-sysprops):显示 java.versionos.name 等属性。

jvisualvm(VisualVM)

  • 输入参数

    • 图形化界面操作:无需命令行参数,通过界面选择目标进程或远程主机。
    • 远程连接配置:需在目标 JVM 启动时添加 JMX 参数(如 -Dcom.sun.management.jmxremote.port=8989)。
  • 输出内容

  1. 内存监控

    • 堆内存使用曲线(Eden、Survivor、Old Gen)。
    • 元空间(Metaspace)使用情况。
  2. 线程分析

    • 线程状态(RUNNABLE、BLOCKED 等)。
    • 线程堆栈跟踪(jstack 输出的图形化展示)。
    • 死锁检测(自动标记死锁线程)。
  3. GC 分析

    • GC 事件时间线(Minor GC、Full GC)。
    • GC 耗时统计(YGCT、FGCT)。
  4. 堆转储分析

    • 导入 .hprof 文件,显示对象分布。
    • Dominator Tree:定位内存泄漏对象。
  5. 性能调优

    • CPU 使用率监控。
    • 方法热点分析(采样或 Profiling)。

工具组合使用示例

场景 1:定位内存泄漏

  1. 输入jps -v 获取进程 ID。
  2. 输入jmap -dump:live,format=b,file=heapdump.hprof <pid> 生成堆转储。
  3. 输入jvisualvm 打开 heapdump.hprof
  4. 输出:通过 Dominator Tree 定位占用内存最高的对象。

场景 2:分析 CPU 高占用

  1. 输入top -H -p <pid> 查找高占用线程。
  2. 输入printf "%x\n" <tid> 转换线程 ID 为十六进制。
  3. 输入jstack <pid> | grep -A 20 <hex_tid> 定位线程堆栈。
  4. 输出:线程堆栈跟踪显示异常代码位置(如死循环)。

场景 3:优化 GC 配置

  1. 输入jstat -gc <pid> 1000 10 监控 GC 情况。
  2. 输入jinfo -flag +UseG1GC <pid> 启用 G1 GC。
  3. 输出:GC 频率和耗时下降,堆内存使用更均衡。

注意事项

  1. 生产环境使用限制

    • jmap -dump:生成堆转储可能导致 STW(Stop-The-World),建议通过 -XX:+HeapDumpOnOutOfMemoryError 自动触发。
    • jstack:频繁调用可能导致性能抖动,建议仅在问题排查时使用。
  2. 工具兼容性

    • jvisualvm:仅支持 HotSpot JVM。
    • jmap/jstack:需与目标 JVM 版本一致。
  3. 日志分析工具

    • GC Viewer:分析 jstat -gcutil 生成的日志。
    • MAT(Memory Analyzer):深度分析 .hprof 文件。

相关文章:

【jvm第7集】jvm调优工具(命令行工具)

文章目录 JVM 调优工具&#xff08;命令行工具&#xff09;jps&#xff08;Java Virtual Machine Process Status Tool&#xff09;jstat&#xff08;JVM Statistics Monitoring Tool&#xff09;jmap&#xff08;Memory Map Tool&#xff09;jstack&#xff08;Thread Stack T…...

react中运行 npm run dev 报错,提示vite.config.js出现错误 @esbuild/win32-x64

在React项目中运行npm run dev时&#xff0c;如果遇到vite.config.js报错&#xff0c;提示esbuild/win32-x64在另一个平台中被使用&#xff0c;通常是由于依赖冲突或缓存问题导致的。解决方法是删除node_modules文件夹&#xff0c;并重新安装依赖。 如下图&#xff1a; 解决办…...

鸿蒙UI开发——Builder与LocalBuilder对比

1、概 述 在ArkUI中&#xff0c;有的朋友应该接触过Builder和LocalBuilder。其中有了LocalBuilder的存在&#xff0c;是为了解决组件的父子关系和状态管理的父子关系保持一致的问题。 这里面最直观的表现则是this的指向问题与组件刷新问题&#xff0c;本文对Builder与LocalBu…...

关于光谱相机的灵敏度

一、‌灵敏度的核心定义‌ ‌光谱灵敏度&#xff08;单色灵敏度&#xff09;‌ 描述光谱相机对单色辐射光的响应能力&#xff0c;即探测器对特定波长入射光的输出信号强度与入射光功率的比值。 例如&#xff0c;若在680nm波长下的光谱灵敏度较高&#xff0c;则表示该相机对此…...

Model 速通系列(一)nanoGPT

这个是新开的一个系列用来手把手复现一些模型工程&#xff0c;之所以开这个系列是因为有人留言说看到一个工程不知道从哪里读起&#xff0c;出于对自身能力的提升与兴趣&#xff0c;故新开了这个系列。由于主要动机是顺一遍代码并提供注释。 该系列第一篇博客是 nanoGPT &…...

微信小程序中,一个页面的数据改变了,怎么通知另一个页面也改变?

在微信小程序中&#xff0c;当一个页面的数据改变后通知另一个页面更新&#xff0c;可以通过以下步骤实现&#xff1a; 方法一&#xff1a;使用全局事件总线&#xff08;推荐&#xff09; 步骤说明&#xff1a; 在 app.js 中创建事件系统 在全局 App 实例中实现事件监听和触发…...

MySQL--day4--排序与分页

&#xff08;以下内容全部来自上述课程&#xff09; 1. 排序数据 1.1 排序基本使用 #1.排序 #如果没有使用排序操作&#xff0c;默认情况下查询返回的数据是按照添加数据的顺序显示的 SELECT * FROM employees;# 练习:按照salary从高到低的顺序显示员工信息 # 使用 ORDER …...

自动化测试脚本点击运行后,打开Chrome很久??

亲爱的小伙伴们大家好。 小编最近刚换了电脑&#xff0c;这几天做自动化测试发现打开Chrome浏览器需要等待好长时间&#xff0c;起初还以为代码有问题&#xff0c;或者Chromedriver与Chrome不匹配造成的&#xff0c;但排查后发现并不是&#xff01;&#xff01; 在driver.py中…...

iOS热更新技术要点与风险分析

iOS的热更新技术允许开发者在无需重新提交App Store审核的情况下&#xff0c;动态修复Bug或更新功能&#xff0c;但需注意苹果的审核政策限制。以下是iOS热更新的主要技术方案及要点&#xff1a; 一、主流热更新技术方案 JavaScript动态化框架 React Native & Weex 通过Jav…...

系统架构设计(十二):统一过程模型(RUP)

简介 RUP 是由 IBM Rational 公司提出的一种 面向对象的软件工程过程模型&#xff0c;以 UML 为建模语言&#xff0c;是一种 以用例为驱动、以架构为中心、迭代式、增量开发的过程模型。 三大特征 特征说明以用例为驱动&#xff08;Use Case Driven&#xff09;需求分析和测…...

系分论文《论软件系统安全分析和应用》

系统分析师论文范文系列 【摘要】 2023年3月&#xff0c;我司承接了某知名电商企业“智能化供应链管理系统”的开发任务&#xff0c;我作为系统分析师负责全面的安全分析与设计工作。该系统以提升电商供应链效率为核心&#xff0c;整合仓储、物流、支付等模块&#xff0c;并需应…...

Mac安装redis

1、 去往网址 http://​编download.​编redis.io/releases/ 找到任意 结尾为* .tar.gz的文件下载下来 2、使用终端进入下载下来的redis文件 3、直接执行redis-server 如果出现redis标志性的图代表成功 如果显示command not found :redis-server 则在终端再进入src文件夹下&…...

srs-7.0 支持obs推webrtc流

demo演示 官方教程: https://ossrs.net/lts/zh-cn/blog/Experience-Ultra-Low-Latency-Live-Streaming-with-OBS-WHIP 实现原理就是通过WHIP协议来传输 SDP信息 1、运行 ./objs/srs -c conf/rtc.conf 2、obs推流 3、web端播放webrtc流 打开web:ht...

Babylon.js学习之路《七、用户交互:鼠标点击、拖拽与射线检测》

文章目录 1. 引言&#xff1a;用户交互的核心作用1.1 材质与纹理的核心作用 2. 基础交互&#xff1a;鼠标与触摸事件2.1 绑定鼠标点击事件2.2 触摸事件适配 3. 射线检测&#xff08;Ray Casting&#xff09;3.1 射线检测的原理3.2 高级射线检测技巧 4. 拖拽物体的实现4.1 拖拽基…...

星际争霸小程序:用Java实现策略模式的星际大战

在游戏开发的世界里&#xff0c;策略模式是一种非常实用的设计模式&#xff0c;它允许我们在运行时动态地选择算法或行为。今天&#xff0c;我将带你走进一场星际争霸的奇幻之旅&#xff0c;用Java实现一个简单的星际争霸小程序&#xff0c;通过策略模式来模拟不同种族单位的战…...

请问交换机和路由器的区别?vlan 和 VPN 是什么?

交换机和路由器的区别 特性交换机&#xff08;Switch&#xff09;路由器&#xff08;Router&#xff09;工作层级数据链路层&#xff08;L2&#xff0c;基于MAC地址&#xff09;网络层&#xff08;L3&#xff0c;基于IP地址&#xff09;主要功能在局域网&#xff08;LAN&#…...

BERT 作为Transformer的Encoder 为什么采用可学习的位置编码

摘要 BERT 在位置编码上与原始 Transformer 论文中的 sin/cos 公式不同&#xff0c;选择了可学习&#xff08;learned&#xff09;的位置嵌入方案。本文将从 Transformer 原始位置编码选项入手&#xff0c;分析 BERT 选择 learned positional embeddings 的四大核心原因&#x…...

Python数据可视化高级实战之一——绘制GE矩阵图

目录 一、课程概述 二、GE矩阵? 三、GE 矩阵图的适用范围 五、GE 矩阵的评估方法 (一)市场吸引力的评估要素 二、企业竞争实力的评估要素 三、评估方法与实践应用 1. 定量与定性结合法 2. 数据来源 六、GE矩阵的图形化实现 七、总结:GE 矩阵与 BCG 矩阵的对比分析 (一)GE…...

StreamSaver实现大文件下载解决方案

StreamSaver实现大文件下载解决方案 web端 安装 StreamSaver.js npm install streamsaver # 或 yarn add streamsaver在 Vue 组件中导入 import streamSaver from "streamsaver"; // 确保导入名称正确完整代码修正 <!--* projectName: * desc: * author: dua…...

【Vue 3全栈实战】从响应式原理到企业级架构设计

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

Java线程池调优与实践经验

在Java面试中&#xff0c;线程池调优是一个常见且重要的考察点&#xff0c;尤其是当涉及Spring生态时&#xff0c;ThreadPoolTaskExecutor的使用经验通常会被深入追问。以下是针对该问题的结构化回答&#xff0c;结合原理、实践和调优经验&#xff1a; 1. 线程池调优的核心参数…...

【科研项目】大三保研人科研经历提升

大三保研人&#xff0c;五月科研项目经历提升 现在已经是五月下旬&#xff0c;各大高校的夏令营通知陆续发布&#xff0c;九月的预推免也近在眼前。我知道很多大三的同学正在焦虑——绩点已经定型&#xff0c;竞赛经历又不够丰富&#xff0c;简历上能写的东西太少&#xff0c;面…...

期刊采编系统安装升级错误

我们以ojs系统为例&#xff1a; PHP Fatal error: Uncaught Error: Call to a member function getId() on null in /esci/data/html/classes/install/Upgrade.inc.php:1019 Stacktrace: #0 /esci/data/html/lib/pkp/classes/install/Installer.inc.php(415): Upgrade->con…...

CSS【详解】弹性布局 flex

适用场景 一维&#xff08;行或列&#xff09;布局 基本概念 包裹所有被布局元素的父元素为容器 所有被布局的元素为项目 项目的排列方向&#xff08;垂直/水平&#xff09;为主轴 与主轴垂直的方向交交叉轴 容器上启用 flex 布局 将容器的 display 样式设置为 flex 或 i…...

自回归图像编辑 EditAR: Unified Conditional Generation with Autoregressive Models

Paperhttps://arxiv.org/pdf/2501.04699 Code (coming soon) 目录 方法 实验 EditAR是一个统一的自回归框架&#xff0c;用于各种条件图像生成任务——图像编辑、深度到图像、边缘到图像、分割到图像。 next-token预测的功效尚未被证明用于图像编辑。 EditAR主要构建在Ll…...

React Flow 中 Minimap 与 Controls 组件使用指南:交互式小地图与视口控制定制(含代码示例)

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…...

基于YOLOv8 的分类道路目标系统-PyTorch实现

本文源码: https://download.csdn.net/download/shangjg03/90873939 1. 引言 在智能交通和自动驾驶领域,道路目标分类是一项关键技术。通过对摄像头捕获的图像或视频中的目标进行分类识别,可以帮助车辆或系统理解周围环境,做出更安全的决策。本教程将介绍如何使用 PyTorch …...

STM32之串口通信WIFI上云

一、W模块的原理与应用 基本概念 如果打算让硬件设备可以通过云服务器进行通信&#xff08;数据上报/指令下发&#xff09;&#xff0c;像主流的云服务器有阿里云、腾讯云、华为云&#xff0c;以及其他物联网云平台&#xff1a;巴法云.......&#xff0c;硬件设备需要通过TCP…...

PCB智能报价系统——————仙盟创梦IDE

软件署名 代码贡献&#xff1a; 紫金电子科技有限公司 文案正路&#xff1a;cybersnow 正文 对企业的竞争力有着深远影响。传统的 PCB 报价方式往往依赖人工核算&#xff0c;不仅耗时较长&#xff0c;还容易出现误差。随着科技的发展&#xff0c;PCB 自动报价系统应运而生&a…...

EXO分布式部署deepseek r1

EXO 是一个支持分布式 AI 计算的框架&#xff0c;可以用于在多个设备&#xff08;包括 Mac Studio&#xff09;上运行大语言模型&#xff08;LLM&#xff09;。以下是联调 Mac Studio 512GB 的步骤&#xff1a; 安装 EXO • 从 EXO GitHub 仓库 下载源码或使用 git clone 获取…...