记一次JVM调优

简介: 记一次JVM调优高级程序员必不可少的技能,这个也是高薪必问的问题能够有效通过 JVM 调优提升系统性能的人往往被人们冠以”大牛”、”大师”之类的称呼。过程在项目启动时加上必要的参数-XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps ...

记一次JVM调优

高级程序员必不可少的技能,这个也是高薪必问的问题

能够有效通过 JVM 调优提升系统性能的人往往被人们冠以”大牛”、”大师”之类的称呼。

过程

  1. 在项目启动时加上必要的参数
-XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/aihe/idea/idea_gc.txt -XX:+DisableExplicitGC  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/issue_error

这一步gceasy.io网站上,直接就给了提示,增加metaspace的大小,在参数设置中,我们没有看到设置metaspace,那么下面一步做调整。

  1. 新生代,MetaSpace不够用,增加如下参数
    初始堆内存与最大堆内存大小设为一致,这样虚拟机一次性的分配内存,而不至于在初始堆大小不够用又向系统分配内存
-Xmx2048m -Xms2048m -Xmn1024m -XX:MetaspaceSize=512m

这次参数变更为如下:

-Dfile.encoding=UTF-8
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:-OmitStackTraceInFastThrow
-Xverify:none
-XX:+PrintGC
-XX:+PrintGCCause
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:/Users/aihe/idea/idea_gc.txt
-XX:+DisableExplicitGC
-Xmx2048m
-Xms2048m
-Xmn1024m
-XX:MetaspaceSize=521m

想查看每个具体的属性含义可以用:
java -XX:+PrintFlagsFinal或者去Oracle文档查看详细介绍

  1. 启动idea,打开项目,在gceasy.io网站上分析垃圾收集日志, 可以看到几个常用的指标:

新生代,老年代分配的空间,以及使用的内存峰值

吞吐量及暂停时间:

  • 吞吐量:吞吐量是指应用程序线程用时占程序总用时的比例
  • 暂停时间:指一个时间段内应用程序线程让与 GC 线程执行而完全暂停。

  1. 换一下垃圾收集器试试
-XX:+UseG1GC

看起来吞吐量也降低了,暂停时间也增加了。

  1. 新增一个GC参数,最大的停顿时间为50ms,这个参数

这个参数不是硬性要求,JVM只是会尽最大的努力来达到这个要求,但是还是可能超过这个值

-XX:MaxGCPauseMillis=50

貌似没啥变化,就不贴图了
新增参数,初始堆占用百分比:

-XX:InitiatingHeapOccupancyPercent=50

看起来效果也不是特别好

增加垃圾收集器的并发线程数:,效果反而更差了。

-XX:ParallelGCThreads=20 //设置并行回收时GC的线程数
-XX:ConcGCThreads=5

G1的垃圾收集器阶段:

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选回收
  1. 用一下CMS垃圾收集器看看
-XX:+UseConcMarkSweepGC

效果好些还是不如最初的状态

  1. 我们还是用最开始的垃圾收集器组合吧。

-XX:+UseParallelGC

最后

对JVM这块不够大的指标就看吞吐量和暂停时间,更细的指标需要大家一起探索

目录
相关文章
|
2月前
|
算法 Java 关系型数据库
掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收
JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。
21 0
|
3月前
|
监控 架构师 Java
JVM 11 调优指南:如何进行JVM调优,JVM调优参数
JVM 11的优化指南:如何进行JVM调优,以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数,并提供12个实用的代码示例,每个示例都会结合JVM调优参数和Java代码
100 2
|
3月前
|
存储 SQL 算法
jvm性能调优 - 11J线上VM调优案例分享
jvm性能调优 - 11J线上VM调优案例分享
60 0
|
3月前
|
存储 缓存 监控
JVM 21 的调优指南:如何进行JVM调优,JVM调优参数
聊聊关于JVM 21的优化指南。这篇文章将会深入探讨如何进行JVM调优,介绍一些关键的JVM调优参数,并提供12个实用的代码示例。由于篇幅较长,我会分几个部分来详细讲解,之前写的也有33篇系列教程JVM调优实战打击也可以去围观。
101 0
|
3月前
|
存储 监控 算法
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
|
3月前
|
监控 架构师 Java
JVM 8 调优指南:如何进行JVM调优,JVM调优参数
这篇文章将详细介绍如何进行JVM 8调优,包括JVM 8调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合JVM启动参数和Java代码。JVM调优是指通过调整Java虚拟机的配置来提升Java应用程序的性能。这包括优化堆内存设置、选择合适的垃圾收集器以及调整其他性能相关的参数。
189 0
|
21天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
60 0
|
3月前
|
监控 安全 架构师
JVM 17 调优指南:如何进行JVM调优,JVM调优参数
在这篇文章中,我会详细介绍JVM调优的概念、重要性和具体的JVM调优参数。此外,我将提供12个实用的代码示例,每个示例都会包含JVM调优参数和相应的Java代码。JVM调优是调整和配置Java虚拟机(JVM)的过程,以便最大限度地提高应用程序的性能和效率。这涉及到调整内存设置、选择合适的垃圾收集器,以及配置各种性能参数。
236 0
|
4月前
|
Java 应用服务中间件 Linux
JVM调优总结(一)之参数配置说明与实例
JVM调优总结(一)之参数配置说明与实例
133 0
|
2月前
|
存储 算法 Java
工作5年,我竟发现JVM只用这4个技巧就可以轻松调优
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
10 0