美文网首页
JVM 参数配置

JVM 参数配置

作者: 无痕_Gumj | 来源:发表于2019-10-24 17:45 被阅读0次

    1. JVM参数详解

    -verbose:gc
    -XX:+PrintGCDetails 打印GC日志信息

    -Xms20M 设置堆内存最小值, 默认为物理内存1/64,等价于-XX:InitialHeapSize
    -Xmx20M 设置对内存最大值, 默认为物理内存1/4,等价于-XX:MaxHeapSize
    -Xmn10M 设置新生代内存大小,
    -Xss1024K 设置单个线程栈的大小,一般默认为1024K,等价于-XX:ThreadStackSize
    -XX:SurvivorRatio=8 设置Eden区和S0/S1的空间比例大小。(默认 Eden:S0:S1=8:1:1)
    -XX:NewRatio=2 设置新生代与老年代在堆内存结构的占比。
    默认:-XX:NewRatio=2 新生代占1,老年代占2,新生代占整个堆的1/3.
    假设:-XX:NewRatio=4 新生代占1,老年代占4,新生代占整个堆的1/5.

    元空间参数设置
    默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:
    -XX:MetaspaceSize 初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
    例:-XX:MetaspaceSize=100m
    -XX:MaxMetaspaceSize 最大空间,默认是没有限制的。

    除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
    -XX:MinMetaspaceFreeRatio 在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
    -XX:MaxMetaspaceFreeRatio 在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

    -XX:MaxTenuringThreshold=15 设置的是年龄阈值,默认15(对象被复制的次数,达到最大次数后对象从新生代的Survivor区进入到老年代)

    2. JVM参数应用

    示例代码

    /**
     * 内存测试
     * 设置最小堆内存,最大堆内存,打印GC详细信息,设置初始元空间大小:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MetaspaceSize=100m
     */
    @Slf4j
    public class WhileTrueTest {
        public static void main(String[] args) throws InterruptedException {
            while (true) {
                TimeUnit.SECONDS.sleep(1);
                log.info("out ---");
            }
        }
    }
    
    2.1 配置打印GC日志信息

    2.1.1 默认未配置JVM运行参数

    E:\IdeaProjectsStudy\spring-example>jps -l
    20960 com.gumj.jvm.WhileTrueTest
    11224
    16888 sun.tools.jps.Jps
    20856 org.jetbrains.jps.cmdline.Launcher
    11452 org.jetbrains.idea.maven.server.RemoteMavenServer
    20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
    5420
    
    #查看是否开启PrintGCDetails参数
    E:\IdeaProjectsStudy\spring-example>jinfo -flag PrintGCDetails 20960
    -XX:-PrintGCDetails
    

    2.1.2 配置JVM运行参数:-XX:+PrintGCDetails


    -XX:+PrintGCDetails

    2.1.3 查看已配置GC日志打印信息

    E:\IdeaProjectsStudy\spring-example>jps -l
    19316 sun.tools.jps.Jps
    21060 org.jetbrains.jps.cmdline.Launcher
    21108 com.gumj.jvm.WhileTrueTest
    11224
    11452 org.jetbrains.idea.maven.server.RemoteMavenServer
    20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
    5420
    
    E:\IdeaProjectsStudy\spring-example>jinfo -flag PrintGCDetails 21108
    -XX:+PrintGCDetails
    

    配置JVM参数后通过命令jinfo -flag PrintGCDetails 21108 可以看到已经开启了GC日志信息打印
    已配置:-XX:+PrintGCDetails
    未配置:-XX:-PrintGCDetails

    2.2 配置初始元空间大小

    2.2.1 查看默认初始元空间大小

    E:\IdeaProjectsStudy\spring-example>jinfo -flag MetaspaceSize 21108
    -XX:MetaspaceSize=21807104
    

    -XX:MetaspaceSize=21807104 的单位为byte, 换算后约20M

    2.2.2 修改初始元空间大小为100M


    -XX:MetaspaceSize=100m

    2.2.3 查看修改后的初始元空间大小

    E:\IdeaProjectsStudy\spring-example>jps -l
    19652 sun.tools.jps.Jps
    11224
    21160 org.jetbrains.jps.cmdline.Launcher
    11452 org.jetbrains.idea.maven.server.RemoteMavenServer
    20252 com.gumj.jvm.WhileTrueTest
    20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
    5420
    
    E:\IdeaProjectsStudy\spring-example>jinfo -flag MetaspaceSize 20252
    -XX:MetaspaceSize=104857600
    
    2.3 查看JVM所有参数配置
    E:\IdeaProjectsStudy\spring-example>jinfo -flags 9280
    Attaching to process ID 9280, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.112-b15
    Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=3145728 -XX:Min
    HeapDeltaBytes=524288 -XX:NewSize=3145728 -XX:OldSize=7340032 -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompre
    ssedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
    Command line:  -Xms10m -Xmx10m -XX:+PrintGCDetails -javaagent:D:\devtools\ideaIU-2019.2.2.win\lib\idea_rt.jar=54259:D:\devtools\
    ideaIU-2019.2.2.win\bin -Dfile.encoding=UTF-8
    
    2.4查看JVM参数默认值
    • java -XX:+PrintFlagsInitial 该命令可以查看JVM所有参数的默认初始值
    E:\IdeaProjectsStudy\spring-example>java -XX:+PrintFlagsInitial
    [Global flags]
        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}
    
    
    • java -XX:+PrintFlagsFinal -version 该命令可以查看JVM所有参数(默认及修改更新后)的值
    E:\IdeaProjectsStudy\spring-example>java -XX:+PrintFlagsFinal -version
    [Global flags]
        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}
    

    在linux中可以使用命令java -XX:+PrintFlagsFinal -version | grep ":"查看那些已经被用户或者JVM设置过的详细的XX参数的名称和值

    $ java -XX:+PrintFlagsFinal -version | grep ":"
    uintx InitialHeapSize                     := 57505088         {product}
    uintx MaxHeapSize                         := 920649728        {product}
    uintx ParallelGCThreads                   := 4                {product}
     bool PrintFlagsFinal                     := true             {product}
     bool UseParallelGC                       := true             {product}
    
    • java -XX:+PrintCommandLineFlags -version 该命令可以查看JVM常用参数值(可查看使用了那种GC收集器)
    E:\IdeaProjectsStudy\spring-example>java -XX:+PrintCommandLineFlags -version
    -XX:InitialHeapSize=266178880 -XX:MaxHeapSize=4258862080 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseComp
    ressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
    java version "1.8.0_112"
    Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
    Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
    

    相关文章

      网友评论

          本文标题:JVM 参数配置

          本文链接:https://www.haomeiwen.com/subject/bphhjctx.html