JVM参数是什么及怎么进行调优

发布时间:2021-10-23 15:46:34 作者:柒染
来源:亿速云 阅读:142

今天就跟大家聊聊有关JVM参数是什么及怎么进行调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

调优基本概念

在调整JVM性能时,通常有三个组件需要考虑:

  1. 堆大小调整

  2. 垃圾收集器调整

  3. JIT编译器

大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优,尤其是针对较新版本的JVM。

通常,在进行Java程序调优的时候,会重点关注两个主要指标:

常用JVM参数

JVM参数是什么及怎么进行调优

GC调优思路

  1. 分析场景,如:启动速度慢,偶尔出现响应慢于平均水平或出现卡顿

  2. 确定目标,如:内存占用,低延时,吞吐量

  3. 收集日志,如:通过参数配置收集GC日志,通过JDK工具查看GC状态

  4. 分析日志,如:使用工具辅助分析日志,查看GC次数,GC时间

  5. 调整参数,如:切换垃圾收集器或者调整垃圾收集器参数

常用GC参数

JVM参数是什么及怎么进行调优

垃圾收集器Parallel参数调优

Parallel垃圾收集器在JDK8中是JVM默认的垃圾收集器,它是以吞吐量优先的垃圾收集器。其可调节的参数如下:

JVM参数是什么及怎么进行调优

垃圾收集器CMS参数调优

CMS垃圾收集器是一个响应时间优先的垃圾收集器,Parallel收集器无法满足应用程序延迟要求时再考虑使用CMS垃圾收集器,从JDK9开始CMS收集器已不建议使用,默认用的是G1垃圾收集器。

JVM参数是什么及怎么进行调优

垃圾收集器G1参数调优

G1收集器是一个兼顾吞吐量和响应时间的收集器,如果是大堆(如堆的大小超过6GB),堆的使用率超过50%,GC延迟要求稳定且可预测的低于0.5秒,建议使用G1收集器。

JVM参数是什么及怎么进行调优

调优示例

示例代码:

@SpringBootApplication
public class SpringBootDemoApplication {
 public static void main(String[] args) {
   SpringApplication.run(SpringBootDemoApplication.class, args);
   Executors.newScheduledThreadPool(1)
       .scheduleAtFixedRate(
           () -> {
             new Thread(
                     () -> {
                       for (int i = 0; i < 150; i++) {
                         try {
                           byte[] temp = new byte[1024 * 512];
                           Thread.sleep(new Random().nextInt(1000));
                         } catch (InterruptedException e) {
                           e.printStackTrace();
                         }
                       }
                     })
                 .start();
           },
           100,
           100,
           TimeUnit.MILLISECONDS);
 }
}

GC分析主要查看GC导致的Stop The World的时间,它会导致程序的延时增加。

示例代码运行的时候建议指定其堆内存的最大值,启动时添加JVM参数-Xmx1024m。程序运行起来之后可以利用jps或者jcmd查看运行的程序进程号。

JVM参数是什么及怎么进行调优

拿到进程号之后利用jstat命令查看GC信息,如动态监控GC统计信息,间隔1000毫秒统计一次,每10行数据后输出列标题:

JVM参数是什么及怎么进行调优

上述两个步骤也可以合并成一个 jstat -gc -h20 $(jcmd | grep “com.example.springbootdemo.SpringBootDemoApplication” | awk ‘{print $1}’) 1000

JVM参数是什么及怎么进行调优

当然除了动态监控GC信息,也可以将GC日志信息打印到文件,然后利用GC分析工具进行分析。

在程序启动时添加JVM参数”-Xmx1024m -Xloggc:/gc.log“,则可以可以将GC日志打印到gc.log文件,然后可以利用GCViewer工具辅助分析GC日志文件,参考地址:https://github.com/chewiebug/GCViewer

GCViewer下载后双击gcviewer-x.xx-SNAPSHOT.jar文件即可运行,然后将gc.log日志文件导入即可观察GC信息。

JVM参数是什么及怎么进行调优

GC调优之前,我们需要了解当前JVM参数的信息。命令 java -XX:+PrintFlagsFinal -version 会打印所有的JVM参数,如需查看指定参数,如查看UseAdaptiveSizePolicy的值可以使用 java -XX:+PrintFlagsFinal -version | grep UseAdaptiveSizePolicy

JVM参数是什么及怎么进行调优

调整-XX:ParallelGCThreads的值可以指定GC并发的线程数,如在JVM启动参数中可以添加 “-Xmx1024m  -XX:ParallelGCThreads=4”,调节GC并发的线程数,观察GC的信息,如Full GC次数FGC,Full GC的总时间FGCT,GC的总时间GCT等进行调优。

同样我们可以在JVM启动参数中指定-XX:MaxGCPauseMills,使用G1收集器-XX:+UseG1GC等,调节JVM启动参数,收集GC日志,更具监控进行相应的调节,进而找到最优值。

看完上述内容,你们对JVM参数是什么及怎么进行调优有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. JVM快速调优手册之六: JVM参数设置及分析
  2. JVM系列:JVM 配置常用参数和常用 GC 调优策略

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:Linux下Shell日期的格式有几种

下一篇:线程的实现方式有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》