你需要知道的JVM参数都在这里

简介: 哈喽,大家好,我是指北君。

JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。下面我们就来对这些JVM参数进行详细的介绍。JVM参数主要分为以下三种(可以根据书写形式来区分):

1、标准参数

标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。

我们可以通过 -help 命令来检索出所有标准参数。

100.jpg

关于这些命令的详细解释,可以参考官网:https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help 也是一个标准参数,再比如使用比较多的 -version也是。

①、-version

显示Java的版本信息。


101.jpg

2、X 参数

对应前面讲的标准化参数,这是非标准化参数。表示在将来的JVM版本中可能会发生改变,但是这类以 -X开始的参数变化的比较小。

我们可以通过 Java -X 命令来检索所有-X 参数。

102.jpg

关于这些参数的介绍,其实上图的中文解释很清楚了,这里我们不作过多的介绍。

3、XX参数

这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。

注意:这种参数是我们后续介绍JVM调优讲解最多的参数。

该参数的书写形式又分为两大类:

①、Boolean类型 格式:-XX:[+-]表示启用或者禁用name属性。

例子:-XX:+UseG1GC(表示启用G1垃圾收集器)

②、Key-Value类型 格式:-XX:=表示name的属性值为value。

例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)

4、参数详解

1、打印已经被用户或者当前虚拟机设置过的参数

103.png


比如:104.jpg

2、最大堆和最小堆内存设置

-Xms512M:设置堆内存初始值为512M

-Xmx1024M:设置堆内存最大值为1024M

这里的ms是memory start的简称,mx是memory max的简称,分别代表最小堆容量和最大堆容量。但是别看这里是-X参数,其实这是-XX参数,等价于:

-XX:InitialHeapSize

-XX:MaxHeapSize

在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。所以在生产环境中,JVM的Xms和Xmx要设置成一样的,能够避免GC在调整堆大小带来的不必要的压力。

3、Dump异常快照以及以文件形式导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆内存出现OOM的概率是所有内存耗尽异常中最高的,出错时的堆内信息对解决问题非常有帮助,所以给JVM设置这个参数(-XX:+HeapDumpOnOutOfMemoryError),让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址,这对于特别是对相隔数月才出现的OOM异常尤为重要。

这两个参数通常配套使用:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

4、发送OOM后,执行一个脚本

-XX:OnOutOfMemoryError

比如这样设置:

-XX:OnOutOfMemoryError="C:\Program Files\Java\jdk1.8.0_152\bin\jconsole.exe"

表示发生OOM后,运行jconsole.exe程序。这里可以不用加“”,因为jconsole.exe路径Program Files含有空格。

利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

5、打印gc信息

①、打印GC简单信息

-verbose:gc

-XX:+PrintGC

一个是标准参数,一个是-XX参数,都是打印详细的gc信息。通常会打印如下信息:

105.jpg

比如第一行,表示GC回收之前有12195K的内存,回收之后剩余1088K,总共内存为125951K

②、打印详细GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

106.jpg

6、指定GC日志以文件输出

-Xloggc:./gc.log

这个在参数用于将gc日志以文件的形式输出,更方便我们去查看日志,定位问题。

7、设置永久代大小

-XX:MaxPermSize=1280m

在JDK1.7以及以前的版本中,只有Hotspot 才有Perm区,称为永久代,它在启动时固定大小,很难进行调优。

在某些情况下,如果动态加载类过多,容易产生Perm区的 OOM。比如某个实际 Web 工程中,因为功能点较多,在运行过程中,要不断动态加载很多类,就会出现类似错误:

"Exception in thread 'dubbo client x.x.connect' java.lang.OutOfMemoryError:PermGenspace"

为了解决这个问题,就需要在项目启动时,设定运行参数-XX:MaxPermSize。

注意:在JDK1.8以后面的版本,使用元空间来代替永久代。在 JDK1.8以及后面的版本中,如果设定参数-XX:MaxPermSize,启动JVM不会报错,但是会提示:

Java Hotspot 64Bit Server VM warning:ignoring option MaxPermSize=1280m:support was removed in 8.0

8、垃圾收集器常用参数

107.jpg

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

相关文章
|
2月前
|
DataWorks Java 关系型数据库
DataWorks常见问题之将预警信息发送至邮箱
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
2月前
|
监控 架构师 Java
JVM 11 调优指南:如何进行JVM调优,JVM调优参数
JVM 11的优化指南:如何进行JVM调优,以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数,并提供12个实用的代码示例,每个示例都会结合JVM调优参数和Java代码
169 2
|
2月前
|
存储 缓存 监控
JVM 21 的调优指南:如何进行JVM调优,JVM调优参数
聊聊关于JVM 21的优化指南。这篇文章将会深入探讨如何进行JVM调优,介绍一些关键的JVM调优参数,并提供12个实用的代码示例。由于篇幅较长,我会分几个部分来详细讲解,之前写的也有33篇系列教程JVM调优实战打击也可以去围观。
209 0
|
2月前
|
监控 架构师 Java
JVM 8 调优指南:如何进行JVM调优,JVM调优参数
这篇文章将详细介绍如何进行JVM 8调优,包括JVM 8调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合JVM启动参数和Java代码。JVM调优是指通过调整Java虚拟机的配置来提升Java应用程序的性能。这包括优化堆内存设置、选择合适的垃圾收集器以及调整其他性能相关的参数。
373 0
|
2月前
|
缓存 算法 安全
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(二)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
33 0
|
2月前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
124 0
|
9天前
|
Java 编译器
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
10 1
|
11天前
|
Java
JVM远程调试参数
JVM远程调试参数
9 1
|
9天前
|
存储 缓存 监控
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
|
10天前
|
监控 Java
JVM 中你不得不知的一些参数
JVM 中你不得不知的一些参数