JVM调优参数大全

1.JVM调优常见参数分类

标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容
非稳定参数(-XX):非Stable参数,即非静态参数,此类参数各个jvm实现会有所不同,将来可能会随时取消,这些参数通常用于高级性能调优、垃圾收集器配置、堆内存大小等高级设置,如设置永久代元空间大小:
JDK7配置为:
-XX:PermSize=512m
-XX:MaxPermSize=512m
在JDK8及以上版本则不同,配置为:
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=512m

2.常用的参数查看和分类

2.1标准参数详解

      输入命令java -help就能获得当前机器所有java的标准参数列表,如java -version, java -jar等,除此之外还有查询GC问题常用的输出参数
-verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。
-verbose:gc 输出每次GC的相关情况。|
-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息

bdpcloud@host154[/home/bdpcloud]$ java -help
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available
    -server       to select the "server" VM
                  The default VM is server,
                  because you are running on a server-class machine.


    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose:[class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image

2.2非标准参数详解

输入java -X命令,能够获得当前JVM支持的所有非标准参数列表,一些常见的参数设置:
-Xms:设置初始Java堆大小
-Xmx:设置最大Java堆大小,通常最大java堆大小与初始堆大小设置为一样大,防止内存抖动,默认为服务器内存的四分之一
-Xss:设置Java线程堆栈大小

bdpcloud@host154[/home/bdpcloud]$ java -X
    -Xmixed           mixed mode execution (default)
    -Xint             interpreted mode execution only
    -Xbootclasspath:<directories and zip/jar files separated by :>
                      set search path for bootstrap classes and resources
    -Xbootclasspath/a:<directories and zip/jar files separated by :>
                      append to end of bootstrap class path
    -Xbootclasspath/p:<directories and zip/jar files separated by :>
                      prepend in front of bootstrap class path
    -Xdiag            show additional diagnostic messages
    -Xnoclassgc       disable class garbage collection
    -Xincgc           enable incremental garbage collection
    -Xloggc:<file>    log GC status to a file with time stamps
    -Xbatch           disable background compilation
    -Xms<size>        set initial Java heap size
    -Xmx<size>        set maximum Java heap size
    -Xss<size>        set java thread stack size
    -Xprof            output cpu profiling data
    -Xfuture          enable strictest checks, anticipating future default
    -Xrs              reduce use of OS signals by Java/VM (see documentation)
    -Xcheck:jni       perform additional checks for JNI functions
    -Xshare:off       do not attempt to use shared class data
    -Xshare:auto      use shared class data if possible (default)
    -Xshare:on        require using shared class data, otherwise fail.
    -XshowSettings    show all settings and continue
    -XshowSettings:all
                      show all settings and continue
    -XshowSettings:vm
                      show all vm related settings and continue
    -XshowSettings:system
                      (Linux Only) show host system or container
                      configuration and continue
    -XshowSettings:properties
                      show all property settings and continue
    -XshowSettings:locale
                      show all locale related settings and continue

The -X options are non-standard and subject to change without notice.

2.3非Stable参数详解

       输入java -XX:+PrintFlagsFinal -version命令即可查看各个版本JVM的参数,可自行输出查看,一般可以将他们归为以下几个大类:
        1.性能参数(Performance Options):用于JVM的性能调优和内存分配控制,如初始化内存大小的设置;
        2.行为参数(Behavioral Options):用于改变JVM的基础行为,如GC的方式和算法的选择;
        3.调试参数(Debugging Options):用于监控、打印、输出等jvm参数,用于显示jvm更加详细的信息;

        此外,此类参数设置方法有四种:
-XX:
+<option> 启用选项,一般用于行为参数,即行为参数开关开启
-XX:-<option> 不启用选项,一般用于行为参数,即行为参数开关关闭
-XX:<option>=<number> 给选项设置一个数字类型值,可跟单位,例如 32k, 1024m, 2g
-XX:<option>=<string> 给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core

2.3.1行为参数

-XX:-DisableExplicitGC:禁止调用System.gc();但jvm的gc仍然有效
-XX:+UseSerialGC:启用串行GC,即采用Serial+Serial Old模式
-XX:+UseParallelGC:启用并行GC,即采用Parallel Scavenge+Serial Old收集器组合(-Server模式下的默认组合)
-XX:GCTimeRatio=99:设置用户执行时间占总时间的比例(默认值99,即1%的时间用于GC)
-XX:MaxGCPauseMillis=time:设置GC的最大停顿时间(这个参数只对Parallel Scavenge有效)
-XX:+UseParNewGC:使用ParNew+Serial Old收集器组合
-XX:ParallelGCThreads:设置执行内存回收的线程数,在+UseParNewGC的情况下使用
-XX:+UseParallelOldGC:使用Parallel Scavenge +Parallel Old组合收集器
-XX:+UseConcMarkSweepGC:使用ParNew+CMS+Serial Old组合并发收集,优先使用ParNew+CMS,当用户线程内存不足时,采用备用方案Serial Old收集。
-XX:+ScavengeBeforeFullGC:新生代GC优先于Full GC执行

2.3.2性能参数

-XX:NewSize=2.125m:新生代对象生成时占用内存的默认值
-XX:MaxNewSize=size:新生成对象能占用内存的最大值
-XX:MaxPermSize=64m:方法区所能占用的最大内存(非堆内存)
-XX:PermSize=64m:方法区分配的初始内存
-XX:MaxTenuringThreshold=15:对象在新生代存活区切换的次数(坚持过MinorGC的次数,每坚持过一次,该值就增加1),大于该值会进入老年代(年龄阈值)
-XX:MaxHeapFreeRatio=70:GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少
-XX:MinHeapFreeRatio=40:GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加
-XX:NewRatio=2:新生代内存容量与老生代内存容量的比例
-XX:ReservedCodeCacheSize=32m:保留代码占用的内存容量
-XX:ThreadStackSize=512:设置线程栈大小,若为0则使用系统默认值
-XX:LargePageSizeInBytes=4m:设置用于Java堆的大页面尺寸
-XX:PretenureSizeThreshold=size:大于该值的对象直接晋升入老年代(这种对象少用为好)
-XX:SurvivorRatio=8:Eden区域Survivor区的容量比值,如默认值为8,代表Eden:Survivor1:Survivor2=8:1:1

2.3.3调试参数

-XX:-CITime:打印消耗在JIT编译的时间
-XX:ErrorFile=./hs_err_pid<pid>.log:保存错误日志或者数据到文件中
-XX:-ExtendedDTraceProbes:开启solaris特有的dtrace探针
-XX:HeapDumpPath=./java_pid<pid>.hprof:指定导出堆信息时的路径或文件名
-XX:-HeapDumpOnOutOfMemoryError:当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError="<cmd args>;<cmd args>":出现致命ERROR之后运行自定义命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>":当首次遭遇OOM时执行自定义命令
-XX:-PrintClassHistogram:遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同
-XX:-PrintConcurrentLocks:遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同
-XX:-PrintCommandLineFlags:打印在命令行中出现过的标记
-XX:-PrintCompilation:当一个方法被编译时打印相关信息
-XX:-PrintGC:每次GC时打印相关信息
-XX:-PrintGCDetails:每次GC时打印详细信息
-XX:-PrintGCTimeStamps:打印每次GC的时间戳
-XX:-TraceClassLoading:跟踪类的加载信息
-XX:-TraceClassLoadingPreorder:跟踪被引用到的所有类的加载信息
-XX:-TraceClassResolution:跟踪常量池
-XX:-TraceClassUnloading:跟踪类的卸载信息
-XX:-TraceLoaderConstraints:跟踪类加载器约束的相关信息

bdpcloud@host154[/home/bdpcloud]$ java -XX:+PrintFlagsFinal -version | more
[Global flags]
     intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}
     bool AggressiveHeap                            = false                               {product}
     bool AggressiveOpts                            = false                               {product}
     intx AliasLevel                                = 3                                   {C2 product}
     bool AlignVector                               = true                                {C2 product}
     intx AllocateInstancePrefetchLines             = 1                                   {product}
     intx AllocatePrefetchDistance                  = 256                                 {product}
     intx AllocatePrefetchInstr                     = 3                                   {product}
     intx AllocatePrefetchLines                     = 3                                   {product}
     intx AllocatePrefetchStepSize                  = 64                                  {product}
     intx AllocatePrefetchStyle                     = 1                                   {product}
     bool AllowJNIEnvProxy                          = false                               {product}
     bool AllowNonVirtualCalls                      = false                               {product}
     bool AllowParallelDefineClass                  = false                               {product}
     bool AllowUserSignalHandlers                   = false                               {product}
     bool AlwaysActAsServerClassMachine             = false                               {product}
     bool AlwaysCompileL
     .........................

<think>嗯,用户想了解JVM参数及其用法,还有性能的详解和应用场景。首先,我需要回忆一下JVM的基本结构,包括内存模型和垃圾回收机制。然后,参数主要分为哪几类呢?比如堆内存设置、垃圾回收器选择、GC日志相关参数等等。 用户提供的引用里提到了-XX参数是不稳定参数,对性能影响大。比如堆内存的-Xms和-Xmx,这两个参数应该是最基础的,用来设置初始堆大小和最大堆大小。还有新生代和老年代的比例,比如-XX:NewRatio,以及Eden和Survivor区的比例,-XX:SurvivorRatio。这些参数需要正确配置,避免频繁GC。 接下来是垃圾回收器的选择,比如Serial、Parallel、CMS、G1、ZGC等。不同的回收器适用于不同场景,比如CMS适合低延迟,G1适合大堆内存。需要解释每个回收器对应的参数,比如-XX:+UseG1GC。 然后是关于GC日志的参数,比如-XX:+PrintGCDetails和-Xloggc,这些对于分析GC问题很重要。还有OOM相关的参数,比如-XX:+HeapDumpOnOutOfMemoryError,帮助生成堆转储文件。 的目标通常是吞吐量、延迟和内存占用。应用场景方面,比如高并发需要低延迟,大数据处理需要高吞吐量,内存不足则需整堆大小。用户可能还关心具体的步骤,比如分析现状、设定目标、参数、测试验证。 用户可能存在的疑问包括如何选择合适的垃圾回收器,如何根据应用特点整内存区域大小,以及如何监控和分析GC日志。需要确保回答结构清晰,分点说明参数类别,每个参数的作用和示例,以及应用场景和步骤。最后生成相关问题,帮助用户进一步学习。</think>### JVM性能参数详解及应用场景 #### 一、核心参数分类 1. **堆内存设置** - `-Xms`:初始堆大小(例如 `-Xms4g`) - `-Xmx`:最大堆大小(例如 `-Xmx8g`) - `-XX:NewRatio`:新生代与老年代的比例(例如 `-XX:NewRatio=2` 表示新生代占1/3,老年代占2/3) - `-XX:SurvivorRatio`:Eden区与Survivor区的比例(例如 `-XX:SurvivorRatio=8` 表示Eden占80%) 2. **垃圾回收器选择** - **Serial GC**:`-XX:+UseSerialGC`(单线程,适合客户端应用) - **Parallel GC**:`-XX:+UseParallelGC`(吞吐量先,默认回收器)[^1] - **CMS GC**:`-XX:+UseConcMarkSweepGC`(低延迟,已逐步淘汰) - **G1 GC**:`-XX:+UseG1GC`(大堆内存、可预测停顿时间) - **ZGC**:`-XX:+UseZGC`(超低延迟,JDK 11+) 3. **GC日志与分析** - `-XX:+PrintGCDetails`:输出详细GC日志 - `-Xloggc:<path>`:指定GC日志文件路径 - `-XX:+PrintGCDateStamps`:记录GC时间戳 4. **OOM与堆转储** - `-XX:+HeapDumpOnOutOfMemoryError`:OOM时生成堆转储文件 - `-XX:HeapDumpPath=<path>`:指定堆转储文件路径 --- #### 二、目标与场景 1. **目标先级** - **吞吐量**:适合后台计算任务(如批量处理),使用Parallel GC - **低延迟**:适合实时系统(如交易系统),使用G1或ZGC - **内存占用**:整`-Xmx`和`-Xms`避免频繁扩容 2. **典型应用场景** - **高并发Web服务**:通过G1 GC减少Full GC停顿时间 - **大数据处理**:增大堆内存(`-Xmx`)并化新生代比例 - **内存泄漏排查**:结合`-XX:+HeapDumpOnOutOfMemoryError`分析堆转储 --- #### 三、步骤建议 1. **分析现状** - 使用`jstat`监控GC频率和耗时 - 通过`jstack`分析线程阻塞问题 2. **设定目标** - 明确吞吐量(如>95%)或最大停顿时间(如<200ms) 3. **参数整** - 逐步整堆大小、新生代比例和回收器类型 4. **测试验证** - 压测工具(如JMeter)验证效果 --- #### 四、注意事项 - **避免过度**:先解决代码层面的性能问题(如内存泄漏)[^2] - **版本差异**:不同JDK版本的默认GC和参数可能不同(如JDK 9+默认G1) - **监控工具**:结合VisualVM、JConsole或Prometheus持续监控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值