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

news2025/12/17 17:17:40

文章目录

  • 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  [C
   2:        500000       40000000  java.lang.String
   3:        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: RUNNABLE
        at 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 文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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 &…

MySQL--day4--排序与分页

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

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

系统分析师论文范文系列 【摘要】 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;通过策略模式来模拟不同种族单位的战…

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…

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;。完整介绍…

STM32之串口通信WIFI上云

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

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

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

LeetCode-链表-合并两个有序链表

LeetCode-链表-合并两个有序链表 ✏️ 关于专栏&#xff1a;专栏用于记录 prepare for the coding test。 文章目录 LeetCode-链表-合并两个有序链表&#x1f4dd; 合并两个有序链表&#x1f3af;题目描述&#x1f50d; 输入输出示例&#x1f9e9;题目提示&#x1f9ea;AC递归&…

sqli-labs靶场29-31关(http参数污染)

目录 前言 less29&#xff08;单引号http参数污染&#xff09; less30&#xff08;双引号http参数污染&#xff09; less31(双引号括号http参数污染) 前言 在JSP中&#xff0c;使用request.getParameter("id")获取请求参数时&#xff0c;如果存在多个同名参数&a…

JVM 垃圾回收机制深度解析(含图解)

JVM 垃圾回收机制深度解析&#xff08;含图解&#xff09; 一、垃圾回收整体流程 垃圾回收图解 #mermaid-svg-KPtxlwWntQx8TOj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KPtxlwWntQx8TOj3 .error-icon{fill…