博主介绍:✌全网粉丝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