美文网首页
jvm 性能调优工具jinfo

jvm 性能调优工具jinfo

作者: 一介书生独醉江湖 | 来源:发表于2023-07-03 16:42 被阅读0次
    示例一: no option
    命令:jinfo pid
    描述:输出当前 jvm 进程的全部参数和系统属性
    
    [root@hhfqv3 bin]# jinfo 1592
    Attaching to process ID 1592, please wait...
    Debugger attached successfully.
    .......
    
    示例二: -flag name
    命令:jinfo -flag name pid
    描述:输出对应名称的参数
    
    [root@hhfqv3 bin]# jinfo -flag MaxHeapSize 1592
    -XX:MaxHeapSize=2051014656
    
    示例三:-flag [+|-]name
    命令:jinfo -flag [+|-]name pid
    描述:开启或者关闭对应名称的参数
    
    # 使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。
    
    [root@hhfqv3 bin]# jinfo -flag PrintGC 1592
    -XX:-PrintGC
    [root@hhfqv3 bin]# jinfo -flag +PrintGC 1592
    [root@hhfqv3 bin]# jinfo -flag PrintGC 1592
    -XX:+PrintGC
    [root@hhfqv3 bin]# jinfo -flag -PrintGC 1592
    [root@hhfqv3 bin]# jinfo -flag PrintGC 1592
    -XX:-PrintGC
    [root@hhfqv3 bin]# 
    
    示例四:-flag name=value
    命令:jinfo -flag name=value pid
    描述:修改指定参数的值。
    
    同示例三,但示例三主要是针对 boolean 值的参数设置的。
    如果是设置 value值,则需要使用 name=value 的形式。
    
    
    [root@hhfqv3 tomcat]# jinfo -flag HeapDumpPath 1592
    -XX:HeapDumpPath=
    [root@hhfqv3 tomcat]# jinfo -flag HeapDumpPath=/opt/tomcat/error.hprof 1592
    [root@hhfqv3 tomcat]# jinfo -flag HeapDumpPath 1592
    -XX:HeapDumpPath=/opt/tomcat/error.hprof
    [root@hhfqv3 tomcat]# 
    
    
    示例五: -flags
    命令:jinfo -flags pid
    描述:输出全部的参数
    
    [root@hhfqv3 tomcat]# jinfo -flags 1592
    Attaching to process ID 1592, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.301-b09
    Non-default VM flags: -XX:CICompilerCount=4 -XX:HeapDumpPath=null -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2051014656 -XX:MaxNewSize=683671552 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:-PrintGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 
    Command line:  -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp
    
    
    示例六:-sysprops
    命令:jinfo -sysprops pid
    描述:输出当前 jvm 进行的全部的系统属性
    
    [root@hhfqv3 tomcat]# jinfo -flags 1592
    Attaching to process ID 1592, please wait...
    Debugger attached successfully.
    Server compiler detected.
    ......
    
    Non-default VM flags:
    非默认VM标志 对应参数的理解
    -XX:CICompilerCount=4   设置最大并行编译数,使用-XX:CICompilerCount=N来调整编译线程的数目
    -XX:ConcGCThreads=3 并发线程数
    -XX:+ExplicitGCInvokesConcurrent    字面直译显式GC调用并发,通常我们不会显式地调用 System.gc()。但是一些情况下,比如使用了 Direct 内存,为了使得其(堆外内存)能够被及时回收,我们会通过显式调用 System.gc() 触发 full gc。但是 full gc 又会导致 stw,所以我们希望显式的对 GC 的触发也是并发执行的,这便是 -XX:ExplicitGCInvokesConcurrent 的意义
    -XX:G1HeapRegionSize=1048576    1048576 = 1024 * 1024 , G1的region size是1M
    -XX:GCLogFileSize=104857600 gc日志文件大小,1048576是1M,再带俩0就是100M
    -XX:InitialHeapSize=2147483648  2147483648 = 1024 * 1024 * 1024 * 2 = 2048M = 2G,堆heap的初始大小
    -XX:InitiatingHeapOccupancyPercent=35   设置触发全局并发标记周期的 Java 堆占用率阈值。默认占用率是整个 Java 堆的 45%。调小这个默认值,希望提前触发全局标记降低full gc的风险
    -XX:+ManagementServer   服务器管理器
    -XX:MarkStackSize=4194304   标记堆栈大小,4194304 = 1024 * 1024 * 4 = 4M
    -XX:MaxGCPauseMillis=20 设置回收器的最大停顿时间,这是一个比较简单的目标,JVM将尽最大努力去实现它,默认是200毫秒,它竟然设置20,要求很高啊
    -XX:MaxHeapSize=2147483648  2147483648 = 1024 * 1024 * 1024 * 2 = 2048M = 2G,堆heap的最大值
    -XX:MaxNewSize=1287651328   堆中最大New size 1287651328 = 1024 * 1024 * 1228 = 1228M = 1.12G
    -XX:MinHeapDeltaBytes=1048576   1048576 = 1024 * 1024 表示当我们要扩容或者缩容的时候,决定是否要做或者尝试扩容的时候最小扩/缩多少,默认为192K。使用G1时,在当新生代无法存储新创建的对象时,会先做一次扩容,扩容大小就是MinHeapDeltaBytes的值,如果还存不下就做GC
    -XX:NumberOfGCLogFiles=10   滚动日志的数量
    -XX:+PrintGC    +PrintGC(或者-verbose:gc)开启了简单GC日志模式,为每一次新生代(young generation)的GC和每一次的Full GC打印一行信息。
    -XX:+PrintGCDateStamps  输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800
    -XX:+PrintGCDetails 打印GC详细信息
    -XX:+PrintGCTimeStamps  输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)
    -XX:+UseCompressedClassPointers 类指针压缩,会压缩klass pointer 这部分的大小,由8字节压缩至4字节,间接的提高内存的利用率。
    -XX:+UseCompressedOops  开启普通对象指针压缩,高内存的利用率
    -XX:+UseFastUnorderedTimeStamps 实验,使用只支持时间戳的平台不稳定时间
    -XX:+UseG1GC    使用垃圾优先(G1)回收器
    -XX:+UseGCLogFileRotation   开启滚动日志
    Command line:
    命令行 对应参数的理解
    -Xms2g  设置初始 Java 堆大小,单位默认是字节,可以使用k,m,g
    -Xmx2g  设置最大 Java 堆大小,单位默认是字节,可以使用k,m,g
    -XX:+UseG1GC    使用垃圾优先(G1)回收器
    -XX:MaxGCPauseMillis=20 设置回收器的最大停顿时间,这是一个比较简单的目标,JVM将尽最大努力去实现它,默认是200毫秒,它竟然设置20,要求很高啊
    -XX:InitiatingHeapOccupancyPercent=35   设置触发全局并发标记周期的 Java 堆占用率阈值。默认占用率是整个 Java 堆的 45%。调小这个默认值,希望提前触发全局标记降低full gc的风险
    -XX:+ExplicitGCInvokesConcurrent    字面直译显式GC调用并发,通常我们不会显式地调用 System.gc()。但是一些情况下,比如使用了 Direct 内存,为了使得其(堆外内存)能够被及时回收,我们会通过显式调用 System.gc() 触发 full gc。但是 full gc 又会导致 stw,所以我们希望显式的对 GC 的触发也是并发执行的,这便是 -XX:ExplicitGCInvokesConcurrent 的意义
    -Xloggc:/xxx/log/kafka-node/kafkaServer-gc.log  日志文件的输出路径
    -verbose:gc 表示输出虚拟机中GC的详细情况
    -XX:+PrintGCDetails 打印GC详细信息
    -XX:+PrintGCDateStamps  输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800
    -XX:+PrintGCTimeStamps  输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)
    -XX:+UseGCLogFileRotation   开启滚动日志
    -XX:NumberOfGCLogFiles=10   滚动日志的数量
    -XX:GCLogFileSize=100M  gc日志文件大小
    
    参考:
    https://www.jianshu.com/p/8d8aef212b25
    https://blog.csdn.net/qq_27093465/article/details/121126332
    

    相关文章

      网友评论

          本文标题:jvm 性能调优工具jinfo

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