JVM调优关注的核心指标?

devtools/2025/3/17 22:20:42/

 

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。

最后再送一句:最好是学会了,而不是学废了!!

2

JVM 调优的核心指标是优化 Java 应用性能的关键,重点关注以下方面:


1. 内存相关指标

1.1 堆内存(Heap Memory)

  • 堆内存使用率:监控堆内存的使用情况,避免内存不足或浪费。

  • 年轻代(Young Generation)

    • Eden 区、Survivor 区的使用情况。

    • 年轻代 GC(Minor GC)的频率和耗时。

  • 老年代(Old Generation)

    • 老年代的使用情况。

    • 老年代 GC(Major GC/Full GC)的频率和耗时。

1.2 非堆内存(Non-Heap Memory)

  • 元空间(Metaspace)

    • 元空间的使用情况,避免类加载过多导致元空间溢出。

  • 直接内存(Direct Memory)

    • 直接内存的使用情况,避免 NIO 操作导致的内存泄漏。

1.3 内存溢出(OOM)

  • 监控是否发生 OutOfMemoryError,并分析堆内存快照(Heap Dump)。


2. 垃圾回收(GC)相关指标

2.1 GC 频率

  • 年轻代 GC(Minor GC)的频率。

  • 老年代 GC(Major GC/Full GC)的频率。

2.2 GC 耗时

  • 每次 GC 的耗时,尤其是 Full GC 的耗时。

  • GC 停顿时间(Stop-the-World Time)。

2.3 GC 吞吐量

  • GC 吞吐量 = (应用运行时间 / 总时间) × 100%。

  • 目标是尽量减少 GC 时间,提高应用运行时间。

2.4 GC 日志

  • 通过 GC 日志分析 GC 行为,定位性能瓶颈。


3. 线程相关指标

3.1 线程数量

  • 监控线程总数,避免线程过多导致上下文切换频繁。

3.2 线程状态

  • 监控线程的状态(RUNNABLE、BLOCKED、WAITING 等),定位锁竞争或资源等待问题。

3.3 死锁

  • 检测是否存在死锁线程。


4. CPU 相关指标

4.1 CPU 使用率

  • 监控 JVM 进程的 CPU 使用率,避免 CPU 过载。

4.2 高 CPU 线程

  • 定位占用 CPU 高的线程,分析其堆栈信息。


5. 类加载相关指标

5.1 类加载数量

  • 监控已加载类的数量,避免类加载过多导致元空间溢出。

5.2 类卸载数量

  • 监控已卸载类的数量,确保类加载器正常工作。


6. I/O 相关指标

6.1 文件 I/O

  • 监控文件读写操作,避免 I/O 成为性能瓶颈。

6.2 网络 I/O

  • 监控网络读写操作,避免网络延迟或阻塞。


7. 锁竞争相关指标

7.1 锁等待时间

  • 监控线程等待锁的时间,定位锁竞争问题。

7.2 锁持有时间

  • 监控线程持有锁的时间,避免锁粒度过大。


8. 响应时间和吞吐量

8.1 响应时间

  • 监控应用的响应时间,确保用户体验。

8.2 吞吐量

  • 监控应用的吞吐量(如每秒处理的请求数),确保系统性能。


9. 工具和监控

9.1 监控工具

  • JVisualVM:可视化监控 JVM 状态。

  • JConsole:监控 JVM 的内存、线程、类加载等。

  • Prometheus + Grafana:实时监控和可视化 JVM 指标。

  • Arthas:实时诊断和分析 JVM 问题。

9.2 日志分析

  • GC 日志:使用 GCViewer 或 GCEasy 分析 GC 行为。

  • 堆内存快照:使用 MAT(Memory Analyzer Tool)分析内存泄漏。


10. 调优目标

10.1 减少 GC 停顿时间

  • 选择合适的垃圾回收器(如 G1、ZGC)。

  • 调整年轻代和老年代的比例。

10.2 提高吞吐量

  • 增加堆内存大小。

  • 优化代码,减少对象创建和销毁的频率。

10.3 降低内存占用

  • 优化数据结构,减少内存浪费。

  • 及时释放不再使用的对象。

10.4 避免 OOM

  • 监控堆内存和元空间的使用情况。

  • 设置合理的堆内存大小和元空间大小。


11. 示例调优参数

以下是一个常见的 JVM 调优参数示例:

java -Xms512m -Xmx2048m \-XX:+UseG1GC -XX:MaxGCPauseMillis=200 \-Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps \-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof \-jar myapp.jar

12. 总结

JVM 调优需要关注以下核心指标:

  • 内存:堆内存、非堆内存、GC 行为。

  • 线程:线程数量、状态、死锁。

  • CPU:CPU 使用率、高 CPU 线程。

  • I/O:文件 I/O、网络 I/O。

  • 锁竞争:锁等待时间、锁持有时间。

  • 响应时间和吞吐量:确保应用性能。

通过合理配置 JVM 参数、监控关键指标和使用工具分析,可以显著提升 Java 应用的性能和稳定性。

3


http://www.ppmy.cn/devtools/167927.html

相关文章

独立IP服务器的好处都有哪些?

独立IP服务器就是指一个网站对应一个IP地址,企业选择使用独立IP服务器之后,网站的等级就会提高,当搜索引擎进行抓取网页时,更容易被抓取,有利于企业网站的搜索和排名,下面我们就来了解一下独立IP服务器的好…

服务性能防腐体系:基于自动化压测的熔断机制

01# 背景 在系统架构的演进过程中,项目初始阶段都会通过压力测试构建安全护城河,此时的服务性能与资源水位保持着黄金比例关系。然而在业务高速发展时期,每个冲刺周期都被切割成以业务需求为单位的开发单元,压力测试逐渐从必选项…

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁? 当 多个事务 在并发执行时,每个事务都 持有其他事务需要的锁,同时又在 等待对方释放锁,导致所有事务都无法继续执行的状态,称为 死锁(Deadlock)。 2. 死锁的四个必要…

Designing Dashboards with SAP Analytics Cloud

Designing Dashboards with SAP Analytics Cloud

【JavaEE进阶】@Transactional 详解

目录 🍃前言 🌲rollbackFor(异常回滚属性) 🚩rollbackFor属性 🚩noRollbackFor属性 🎄Isolation(事务隔离级别) 🚩MySQL事务的隔离级别 🚩Spring事务隔离级别 🎋Spring事务传…

基于 Verilog 的时序设计:从理论到实践的深度探索

在数字电路设计领域,时序设计是一个至关重要的环节,它涉及到组合逻辑电路与时序逻辑电路的设计差异、时钟信号的运用以及触发器的工作原理等多个方面。本文将围绕基于 Verilog 的时序设计实验展开,详细阐述实验过程、代码实现以及结果分析,帮助读者深入理解时序设计的核心概…

c++图论(一)之图论的起源和图的概念

C 图论之图论的起源和图的概念 图论(Graph Theory)是数学和计算机科学中的一个重要分支,其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途: 借用一下CSDN的图片哈 一、图论的起源&…

小米路由器SSH下安装DDNS-GO

文章目录 前言一、下载&安装DDNS-GO二、配置ddns-go设置开机启动 前言 什么是DDNS? DDNS(Dynamic Domain Name Server)是动态域名服务的缩写。 目前路由器拨号上网获得的多半都是动态IP,DDNS可以将路由器变化的外网I…